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 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);

Теги

Был ли ответ полезным?