四、HAL庫(kù)外設(shè)初始化MSP回調(diào)機(jī)制(了解)
五、HAL庫(kù)中斷回調(diào)機(jī)制(了解)
六、USART/UART異步通信配置步驟(掌握)
HAL_UART_Init()
HAL_UART_MspInit() //配置GPIO、NVIC、CLOCK等
HAL_UART_Receive_IT()
HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
USARTx_IRQHandler()、 UARTx_IRQHandler()
USART_DR, HAL_UART_Transmit()
七、IO引腳復(fù)用功能(掌握)
八、編程實(shí)戰(zhàn):通過(guò)串口接收或者發(fā)送一個(gè)字符(掌握)
串口X初始化函數(shù)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-834981.html
/* 接收緩沖, 最大USART_REC_LEN個(gè)字節(jié). */
uint8_t g_usart_rx_buf[USART_REC_LEN];
/* 接收狀態(tài)
* bit15, 接收完成標(biāo)志
* bit14, 接收到0x0d
* bit13~0, 接收到的有效字節(jié)數(shù)目
*/
uint16_t g_usart_rx_sta = 0;
uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL庫(kù)使用的串口接收緩沖 */
UART_HandleTypeDef g_uart1_handle; /* UART句柄 */
/**
* @brief 串口X初始化函數(shù)
* @param baudrate: 波特率, 根據(jù)自己需要設(shè)置波特率值
* @note 注意: 必須設(shè)置正確的時(shí)鐘源, 否則串口波特率就會(huì)設(shè)置異常.
* 這里的USART的時(shí)鐘源在sys_stm32_clock_init()函數(shù)中已經(jīng)設(shè)置過(guò)了.
* @retval 無(wú)
*/
void usart_init(uint32_t baudrate)
{
/*UART 初始化設(shè)置*/
g_uart1_handle.Instance = USART_UX; /* USART_UX */
g_uart1_handle.Init.BaudRate = baudrate; /* 波特率 */
g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* 字長(zhǎng)為8位數(shù)據(jù)格式 */
g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* 一個(gè)停止位 */
g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* 無(wú)奇偶校驗(yàn)位 */
g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* 無(wú)硬件流控 */
g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* 收發(fā)模式 */
HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()會(huì)使能UART1 */
/* 該函數(shù)會(huì)開(kāi)啟接收中斷:標(biāo)志位UART_IT_RXNE,并且設(shè)置接收緩沖以及接收緩沖接收最大數(shù)據(jù)量 */
HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
}
UART底層初始化函數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-834981.html
/**
* @brief UART底層初始化函數(shù)
* @param huart: UART句柄類(lèi)型指針
* @note 此函數(shù)會(huì)被HAL_UART_Init()調(diào)用
* 完成時(shí)鐘使能,引腳配置,中斷配置
* @retval 無(wú)
*/
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef gpio_init_struct;
if (huart->Instance == USART_UX) /* 如果是串口1,進(jìn)行串口1 MSP初始化 */
{
USART_TX_GPIO_CLK_ENABLE(); /* 使能串口TX腳時(shí)鐘 */
USART_RX_GPIO_CLK_ENABLE(); /* 使能串口RX腳時(shí)鐘 */
USART_UX_CLK_ENABLE(); /* 使能串口時(shí)鐘 */
gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* 串口發(fā)送引腳號(hào) */
gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* 復(fù)用推挽輸出 */
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* IO速度設(shè)置為高速 */
HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct);
gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* 串口RX腳 模式設(shè)置 */
gpio_init_struct.Mode = GPIO_MODE_AF_INPUT;
HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* 串口RX腳 必須設(shè)置成輸入模式 */
#if USART_EN_RX
HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* 使能USART1中斷通道 */
HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* 組2,最低優(yōu)先級(jí):搶占優(yōu)先級(jí)3,子優(yōu)先級(jí)3 */
#endif
}
}
到了這里,關(guān)于stm32——hal庫(kù)學(xué)習(xí)筆記(串口<二>)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!