生活随笔
收集整理的這篇文章主要介紹了
串口发送通信---UART发送---STM32F4实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
串口發送程序配置過程(HAL庫)
初始化串口相關參數,使能串口
HAL_StatusTypeDef
HAL_UART_Init ( UART_HandleTypeDef
* huart
)
該函數的參數是串口的基址,在stm32f429xx.h文件中,定義了8個UART_HandleTypeDef的值,分別是USART1、USART2、USART3、UART4、UART5、USART6、UART7、UART8,可以用HAL_UART_Init對這8個串口進行初始化,我們要用USART1,就填USART1
串口相關IO口配置,復用配置
在HAL_UART_MspInit中調用HAL_GPIO_Init函數
發送數據,并等待數據發送完畢
HAL_UART_Transmit()
具體代碼
我們以STM32F4中的 PA9和PA10的UART1通信為例。
首先是初始化串口相關參數,使能串口,使用的函數是HAL_UART_Init(),我們定義一個函數來調用它,具體代碼如下:
UART_HandleTypeDef usart_handler
; void usart1_init ( void )
{ usart_handler
. Instance
= USART1
; usart_handler
. Init
. BaudRate
= 115200 ; usart_handler
. Init
. HwFlowCtl
= UART_HWCONTROL_NONE
; usart_handler
. Init
. Mode
= UART_MODE_TX_RX
; usart_handler
. Init
. Parity
= UART_PARITY_NONE
; usart_handler
. Init
. StopBits
= UART_STOPBITS_1
; usart_handler
. Init
. WordLength
= UART_WORDLENGTH_8B
; HAL_UART_Init ( & usart_handler
) ; }
HAL_UART_Init函數要傳入一個UART_HandleTypeDef 的指針,該指針指向一個結構體,我們要對其初始化。具體要初始化兩個變量,一個變量是Instance ,指定使用哪個串口通信,另一個是Init,指明波特率、有無硬件控制流、模式、有無奇偶校驗、有幾個停止位以及每次傳入的數據是幾位。
HAL_UART_Init初始完后,會自動調用HAL_UART_MspInit函數,在這個函數中,我們進行GPIO口的初始化以及使能,代碼如下
void HAL_UART_MspInit ( UART_HandleTypeDef
* huart
)
{ if ( huart
-> Instance
== USART1
) { GPIO_InitTypeDef GPIO_Initure
; __HAL_RCC_GPIOA_CLK_ENABLE ( ) ; __HAL_RCC_USART1_CLK_ENABLE ( ) ; GPIO_Initure
. Pin
= GPIO_PIN_9
; GPIO_Initure
. Mode
= GPIO_MODE_AF_PP
; GPIO_Initure
. Pull
= GPIO_PULLUP
; GPIO_Initure
. Speed
= GPIO_SPEED_FAST
; GPIO_Initure
. Alternate
= GPIO_AF7_USART1
; HAL_GPIO_Init ( GPIOA
, & GPIO_Initure
) ; GPIO_Initure
. Pin
= GPIO_PIN_10
; HAL_GPIO_Init ( GPIOA
, & GPIO_Initure
) ; } }
因為要復用引腳,所以在配置GPIO口時,我們要配置Alternate變量,指明要復用的引腳功能,即GPIO_AF7_USART1,PA9和PA10作為USART1的引腳。 HAL_UART_MspInit每個HAL_UART_Init都會調用,我們不知道是哪一個串口調用的,所以我們要根據Instance 來判斷是哪一個串口調用的。
兩個函數配置完成后,我們就可以發送數據了,我們在main函數里面調用HAL_UART_Transmit來發送數據,具體代碼為
int main ( void )
{ u8 buff
[ ] = "send to rec" ; HAL_Init ( ) ; Stm32_Clock_Init ( 360 , 25 , 2 , 8 ) ; delay_init ( 180 ) ; usart1_init ( ) ; while ( 1 ) { HAL_UART_Transmit ( & usart_handler
, buff
, sizeof ( buff
) , 1000 ) ; delay_ms ( 300 ) ; } }
HAL_UART_Transmit第一個參數指明用哪個串口來發送數據,第二個參數是指向數據的指針,第三個參數是數據的大小,第四個是 Timeout duration 。
結果
總結
以上是生活随笔 為你收集整理的串口发送通信---UART发送---STM32F4实现 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。