【NUCLEO-WB09KE评测】2、UART中断方式串口通信
[复制链接]
目标
为NUCLEO-WB09KE搭建基本环境,驱动LED、UART,实现UART中断方式串口通信。
跑通编译、下载流程,建立信心,为后面评测做好准备。
一、STM32CubeMX配置
MX新建一个工程,选择NUCLEO-WB09KE开发板
由于选择了开发板,涉及BSP的部分已经配置好了,缺省的引脚也做了预留。
1、BSP配置
勾选了LED,BUTTON,因为要用中断方式实现UART,所以没有勾选VCOM。
2、USART1配置
设置了中断方式
生成代码
二、代码修改
1、实现printf重定向
据说ARM官方推荐用retarget.c的方式实现printf重定向
从keil/arm/startup/拷贝一份retarget.c到Core\Src下
为了支持ARM6.xx编译,将retarget.c做如下修改
//#pragma import(__use_no_semihosting_swi)
__asm(".global __use_no_semihosting");
//extern int getkey(void); /* in Serial.c */
//struct __FILE { int handle; /* Add whatever you need here */ };
//int fgetc(FILE *f) {
// return (sendchar(getkey()));
//}
main.c中增加:
/* USER CODE BEGIN 0 */
int sendchar(int ch)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff);
return ch;
}
/* USER CODE END 0 */
2、配置USART中断接收
USART1初始化完成后,使能接收中断。
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
// 使能UART中断
if (HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{
Error_Handler();
}
增加中断接收处理回调函数:
HAL_UART_RxCpltCallback在aRxBuffer缓存接收满后一次。因此RXBUFFERSIZE被设置为1,这样每接收一个字符,HAL_UART_RxCpltCallback被调用一次。
当接收到1时,翻转绿灯。
为了下一次中断,需要再次设置HAL_UART_Receive_IT。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if (UartHandle->Instance == USART1)
{
// 处理接收到的数据
// aRxBuffer 是存储接收数据的缓冲区
if(aRxBuffer[0]==1)
{
//printf("HAL_UART_RxCpltCallback\r\n");
BSP_LED_Toggle(LED_GREEN);
aRxBuffer[0]=0;
}
// 重新使能中断以继续接收数据
if (HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{
Error_Handler();
}
}
}
三、运行效果
1、串口收到信息。2、通过串口向MCU发送1,绿灯翻转。
|