今天开始试验下串口,试验完成的功能:按下user按键,通过串口发送8个数据,当接收到串口助手发来的数据,并且第8位是0x08时,点亮led灯,如果第8位是0x09时,熄灭led灯。
试验步骤:
第一步:将上一篇的按键中断工程另保存为usart工程,用stm32cube MX配置端口,首先选择PA9为USART1_TX,PA10为USART1_RX。此时PA9和PA10是黄色的,这是因为还没有选择USART1工作模式。
第二步:选择USART模式:
如下图,选择USART1的Mode为异步方式,没有使用硬件流控制。
第三步:配置USART1相关参数,选择波特率为115200,8位数据位长度,无奇偶校验,1个停止位。
第四步:配置NVIC,考虑到使用串口接收中断,所以配置NVIC,使能串口中断。
第五步:开始编写程序
1、在main.c的while循环中加入接收中断程序
HAL_UART_Receive_IT(&huart1, RxData,8); /* 采用中断方式接收8个数据 *//
2、编写按键中断回调函数,当按下按键时,发送8个数据
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_13)
{
HAL_UART_Transmit(&huart1, TxData,8,10);
}
}
3、编写串口接收中断回调函数,当接收的数据的第8位为0x08,点亮led灯,当接收的数据第8位为0x09,熄灭led灯
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if (RxData[7] == 0x08)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
if (RxData[7] == 0x09)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
}