摘要:串口波特率設(shè)置。串口的狀態(tài)可以通過狀態(tài)寄存器讀取。關(guān)閉接收完成中斷使能中斷通道搶占優(yōu)先級,子優(yōu)先級第五編寫中斷服務(wù)函數(shù)第六串口數(shù)據(jù)接收和發(fā)送發(fā)送與接收是通過數(shù)據(jù)寄存器來實現(xiàn)。
? ? ? ?串口基本配置的寄存器,配置過程總結(jié)為:
1、串口時鐘使能。這里的串口1設(shè)置是APB2ENR寄存器的第4位。
2、串口波特率設(shè)置。每個串口都有一個自己獨立的波特 率寄存器 USART_BRR,通過設(shè)置該寄存器就可以達到配置不同波特率的目的。
3、串口控制。STM32F429 的每個串口都有 3 個控制寄存器 USART_CR1~3,串口的很多 配置都是通過這 3 個寄存器來設(shè)置的。這里我們只要用到 USART_CR1 就可以實現(xiàn)我們的功能。
4、數(shù)據(jù)發(fā)送與接收。STM32F429 的發(fā)送與接收是通過數(shù)據(jù)寄存器 USART_DR 來實現(xiàn)的, 這是一個雙寄存器,包含了 TDR 和 RDR。
5、串口狀態(tài)。串口的狀態(tài)可以通過狀態(tài)寄存器 USART_SR 讀取。
? ? ?思考:假如用HAL庫進行配置的話,實現(xiàn)過程是什么?
第一:初始化函數(shù) HAL_UART_Init 相關(guān)函數(shù):
? ? ?HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
? ? 解釋:函數(shù)只有一個入口參數(shù) huart,為 UART_HandleTypeDef 結(jié)構(gòu)體指針類型,稱為:句柄。
第二:使能串口和 GPIO 口時鐘
? ?使用串口,我們必須使能串口時鐘和使用到的 GPIO 口時鐘。
?__HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 時鐘? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?__HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 時鐘
第三:GPIO 口初始化設(shè)置(速度,上下拉等)以及復(fù)用映射配置
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10; //PA9/PA10 GPIO_Initure.Mode=GPIO_MODE_AF_PP; //復(fù)用推挽輸出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速
GPIO_Initure.Alternate=GPIO_AF7_USART1; //復(fù)用為 USART1 HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9/PA10
第四:開啟串口相關(guān)中斷,配置串口中斷優(yōu)先級
__HAL_UART_ENABLE_IT(huart,UART_IT_RXNE); //開啟接收完成中斷
第一個參數(shù):huart為串口句柄? ? ?第二個參數(shù):要開啟的中斷類型。
__HAL_UART_DISABLE_IT(huart,UART_IT_RXNE); //關(guān)閉接收完成中斷
HAL_NVIC_EnableIRQ(USART1_IRQn); //使能 USART1 中斷通道 HAL_NVIC_SetPriority(USART1_IRQn,3,3); //搶占優(yōu)先級 3,子優(yōu)先級3
第五:編寫中斷服務(wù)函數(shù)
void USART1_IRQHandler(void);
第六:串口數(shù)據(jù)接收和發(fā)送
發(fā)送與接收是通過數(shù)據(jù)寄存器 USART_DR 來實現(xiàn)。當向該寄存器寫數(shù)據(jù)的時候,串口就會自動發(fā)送,當收到數(shù)據(jù)的時候,也 是存在該寄存器內(nèi)。
HAL 庫操作 USART_DR 寄存器發(fā)送數(shù)據(jù)的函數(shù)是:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
通過該函數(shù)向串口寄存器 USART_DR 寫入一個數(shù)據(jù):
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/120924.html
摘要:復(fù)位系列芯片的復(fù)位可使用管腳。這個和保存代碼的是不一樣的,計劃使用。 記錄一下第一次使用立創(chuàng)EDA第一次設(shè)計ESP-C3的開發(fā)板(這幾天工作有點忙,稍等) 目錄 ...
摘要:實驗?zāi)康耐ㄟ^上位機向發(fā)送字符串,由解析提取出指定的屬性值,并發(fā)送到云平臺。詳見文檔阿里云開發(fā)板響應(yīng)串口指令阿里云開發(fā)板響應(yīng)串口指令第二個知識點,怎么樣將字符串解析出關(guān)鍵屬性值。 摘要:本文介紹使用HaaS510從串口接收數(shù)據(jù),從數(shù)據(jù)中提取所需的屬性值,并發(fā)送到物聯(lián)網(wǎng)平臺的方法。從串口接收到的...
摘要:每個字節(jié)后必須跟一個響應(yīng)位。低速率一般是同一個板子上的兩個芯片間通信,數(shù)據(jù)量不大,速率低。速率幾百,速率可能不同,不能超過的最高速率。 介紹:I2C通訊協(xié)議(Inter-Integrated Circuit)引腳少,硬件實現(xiàn)簡單,可擴展性強,不需要USART、CAN等通訊協(xié)議的外部收發(fā)設(shè)備,...
摘要:異步通信與同步通信異步通信異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時鐘控制數(shù)據(jù)的發(fā)送和接收過程。同步通信同步通信時要建立發(fā)送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。配置串口設(shè)置為異步通信基礎(chǔ)參數(shù)波特率為。 ...
閱讀 1007·2023-04-26 02:21
閱讀 2825·2021-09-24 09:47
閱讀 1616·2019-08-30 15:55
閱讀 2171·2019-08-30 14:01
閱讀 2330·2019-08-29 14:01
閱讀 2055·2019-08-29 12:46
閱讀 821·2019-08-26 13:27
閱讀 1944·2019-08-26 12:23