62489
[i] Смена скорости контроллера UART
Подскажите, как корректно изменить скорость контроллера UART, который ранее был проинициализирован и включен?
Пример последовательности смены скорости контроллера UART:
1) Дождаться окончания завершения передачи текущих данных с помощью флага BUSY в регистре FR (пока флаг не сбросится в 0).
2) Выключить работу приемопередатчика путем сброса бита UARTEN в регистре CR.
3) Выполнить запись новых коэффициентов деления частоты обмена в регистры IBRD и FBRD.
4) Выполнить запись в регистр UARTLCR_H, чтобы изменения коэффициентов деления частоты обмена вступили в силу.
5) Включить работу приемопередатчика путем установки бита UARTEN в регистре CR.
Аналогичные действия можно выполнить с помощью функций SPL, при этом п. 3 и 4 будут выполнены с помощью функции инициализации контроллера UART (фрагмент кода 1).
Фрагмент кода 1 - Пример смены скорости контроллера UART1 с помощью SPL
1) Дождаться окончания завершения передачи текущих данных с помощью флага BUSY в регистре FR (пока флаг не сбросится в 0).
2) Выключить работу приемопередатчика путем сброса бита UARTEN в регистре CR.
3) Выполнить запись новых коэффициентов деления частоты обмена в регистры IBRD и FBRD.
4) Выполнить запись в регистр UARTLCR_H, чтобы изменения коэффициентов деления частоты обмена вступили в силу.
5) Включить работу приемопередатчика путем установки бита UARTEN в регистре CR.
Аналогичные действия можно выполнить с помощью функций SPL, при этом п. 3 и 4 будут выполнены с помощью функции инициализации контроллера UART (фрагмент кода 1).
Фрагмент кода 1 - Пример смены скорости контроллера UART1 с помощью SPL
while(UART_GetFlagStatus(MDR_UART1, UART_FLAG_BUSY) == SET) { }
UART_Cmd(MDR_UART1, DISABLE);
UART_InitStructure.UART_BaudRate = NewSpeed;
...
UART_Init(MDR_UART1, &UART_InitStructure);
UART_Cmd(MDR_UART1, ENABLE);