串口基本配置的暫存器,配置程序總結為:
1、串口時鐘使能,這里的串口1設定是APB2ENR暫存器的第4位,
2、串口波特率設定,每個串口都有一個自己獨立的波特 率暫存器 USART_BRR,通過設定該暫存器就可以達到配置不同波特率的目的,
3、串口控制,STM32F429 的每個串口都有 3 個控制暫存器 USART_CR1~3,串口的很多 配置都是通過這 3 個暫存器來設定的,這里我們只要用到 USART_CR1 就可以實作我們的功能,
4、資料發送與接收,STM32F429 的發送與接收是通過資料暫存器 USART_DR 來實作的, 這是一個雙暫存器,包含了 TDR 和 RDR,
5、串口狀態,串口的狀態可以通過狀態暫存器 USART_SR 讀取,
思考:假如用HAL庫進行配置的話,實作程序是什么?
第一:初始化函式 HAL_UART_Init 相關函式:
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
解釋:函式只有一個入口引數 huart,為 UART_HandleTypeDef 結構體指標型別,稱為:句柄,
第二:使能串口和 GPIO 口時鐘
使用串口,我們必須使能串口時鐘和使用到的 GPIO 口時鐘,
__HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 時鐘 __HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 時鐘
第三:GPIO 口初始化設定(速度,上下拉等)以及復用映射配置
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10; //PA9/PA10 GPIO_Initure.Mode=GPIO_MODE_AF_PP; //復用推挽輸出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速
GPIO_Initure.Alternate=GPIO_AF7_USART1; //復用為 USART1 HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9/PA10
第四:開啟串口相關中斷,配置串口中斷優先級
__HAL_UART_ENABLE_IT(huart,UART_IT_RXNE); //開啟接收完成中斷
第一個引數:huart為串口句柄 第二個引數:要開啟的中斷型別,
__HAL_UART_DISABLE_IT(huart,UART_IT_RXNE); //關閉接收完成中斷
HAL_NVIC_EnableIRQ(USART1_IRQn); //使能 USART1 中斷通道 HAL_NVIC_SetPriority(USART1_IRQn,3,3); //搶占優先級 3,子優先級3
第五:撰寫中斷服務函式
void USART1_IRQHandler(void);
第六:串口資料接收和發送
發送與接收是通過資料暫存器 USART_DR 來實作,當向該暫存器寫資料的時候,串口就會自動發送,當收到資料的時候,也 是存在該暫存器內,
HAL 庫操作 USART_DR 暫存器發送資料的函式是:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
通過該函式向串口暫存器 USART_DR 寫入一個資料:
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302572.html
標籤:其他
上一篇:嵌入式新聞早班車-第27期
