Обмен технологиями

Принцип работы последовательного порта STM32

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Последовательный порт STM32 довольно богат и обладает мощными функциями. Он может обеспечить до 5 последовательных портов с дробным генератором скорости передачи данных, поддерживает однолинейную оптическую связь и полудуплексную однолинейную связь, поддерживает LIN, протокол смарт-карт и спецификацию IrDA SIRENDEC (поддерживается только последовательным портом 3), DMA , и т. д.

Самая основная настройка последовательного порта — это настройка скорости передачи данных. Последовательный порт STM32 довольно прост в использовании. Пока вы включаете часы последовательного порта, устанавливаете режим соответствующего порта ввода-вывода, а затем настраиваете скорость передачи данных, длину битов данных, бит четности и другую информацию, вы можете использовать. это. Ниже мы кратко представим эти регистры, непосредственно связанные с базовой конфигурацией последовательного порта.

1. Включите синхронизацию последовательного порта. В качестве периферийного устройства STM32 тактовый сигнал последовательного порта контролируется регистром постоянного включения периферийного устройства. Последовательный порт 1, который мы здесь используем, представляет собой бит 14 регистра APB2ENR. За исключением разрешения синхронизации последовательного порта 1 в регистре APB2ENR, все биты разрешения синхронизации других последовательных портов находятся в APB1ENR.

2. Сброс последовательного порта. . Когда в периферийном устройстве возникает неисправность, периферийное устройство можно сбросить, установив соответствующий бит в регистре сброса, а затем периферийное устройство можно переконфигурировать, чтобы оно снова заработало.Обычно, когда система впервые настраивает периферийные устройства, она сначала
Выполните операцию по сбросу этого периферийного устройства. Сброс последовательного порта 1 достигается путем настройки бита 14 регистра APB2RSTR.

3. Настройка скорости передачи данных последовательного порта. Каждый последовательный порт имеет свой собственный независимый регистр скорости передачи данных USART BRR. Установив этот регистр, вы можете настроить разные скорости передачи данных. Описание битов этого регистра следующее:

 

4. Управление последовательным портом. Каждый последовательный порт STM32 имеет три регистра управления USART CR1~3. Многие конфигурации последовательного порта устанавливаются через эти три регистра.

5. Отправка и получение данных. Отправка и получение STM32 осуществляется через регистр данных USART _DR. Это двойной регистр, включающий TDR и RDR. При записи данных в этот регистр последовательный порт автоматически отправит их при получении.
время, оно также сохраняется в этом регистре.

Видно, что хотя это 32-битный регистр, используются только младшие 9 бит (DR[8:0]), а остальные зарезервированы. DR[8:0] — данные последовательного порта, включая отправленные или полученные данные. Поскольку он состоит из двух регистров: одного для отправки (TDR) и одного для приема (RDR), этот регистр выполняет функции как чтения, так и записи. Регистр TDR обеспечивает параллельный интерфейс между внутренней шиной и выходным сдвиговым регистром. Регистр RDR обеспечивает параллельный интерфейс между входным сдвиговым регистром и внутренней шиной.

При передаче с включенным проверочным битом (установлен бит USART CR1 PCE) значение, записанное в старший бит (старший бит — это 7-й или 8-й бит в зависимости от длины данных), будет изменено последующей заменой проверочных битов. Когда бит четности разрешен для приема, считанный бит MSB является полученным битом четности.

6. Статус последовательного порта можно прочитать через регистр состояния USART SR.

Здесь мы сосредоточимся на двух битах: битах 5 и 6 RXNE и TC.
RXNE (регистр считанных данных не пуст), когда этот бит установлен в 1, это указывает, что данные получены и могут быть считаны. Что нам нужно сделать в это время, так это как можно скорее прочитать USART DR. Читая USART DR, мы можем очистить этот бит или записать 0 в этот бит, чтобы очистить его напрямую.
TC (отправка завершена), когда этот бит установлен, это означает, что данные в USARTDR были отправлены. Если для этого бита установлено прерывание, будет сгенерировано прерывание. Этот бит также имеет два метода очистки: 1: чтение USART SR и запись USARTDR. 2: Запишите 0 непосредственно в этот бит.

  1. void uart_init(u32 pclk2,u32 bound)
  2. {
  3. float temp;
  4. u16 mantissar
  5. u16 fraction;
  6. temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
  7. mantissa=temp;//得到整数部分
  8. fraction=(temp-mantissa)*16://得到小数部分
  9. mantissa<<=4;
  10. mantissa+=fraction;
  11. RCC->APB2ENRI=1<<2;//使能PORTA口时钟
  12. RCC->APB2ENRI=1<<14;//使能串口时钟
  13. GPIOA->CRH&=0XFFFFF00F;
  14. GPIOA->CRH|=0X000008B0;//IO状态设置
  15. RCC->APB2RSTRI=1<<14;//复位串口1
  16. RCC->APB2RSTR&=~(1<<14)://停止复位
  17. //波特率设置
  18. USART1->BRR=mantissa;//波特率设置
  19. USART1->CR1|=0X200C;//1位停止,无校验位,
  20. USART1->CR1|=1<<8;//PE中断使能
  21. USART1->CR11=1<<5;//接收缓冲区非空中断使能
  22. MY_NVIC_Init(3,3,USART1 IRQChannel,2);//组2,最低优先级
  23. }

Инициализируйте аппаратное устройство последовательного порта и разрешите прерывания:

Шаги настройки:

(1) Включите часы GPI0 и USART1.
(2) Установите режим GPI0 для двух контактов USART1.
(3) Настройте формат данных USART1, скорость передачи данных и другие параметры.
(4) Включить функцию прерывания приема USART1.
(5) Наконец включите функцию USART1.