蓝桥杯嵌入式:串口的使用(五)

本文带你速攻蓝桥杯嵌入式的发送和接收;
我们在比赛时用的开发板的串口一般都是串口一(PA9 PA10)(因为串口2需要转接器才能用,没有直接连接在dap上面);

CUBEMX的配置在这里插入图片描述

像我那样直接将USART1设置成Asynchronous模式就可以了,其他参数默认即可。
在这里插入图片描述
但这里的串口一中断请打开,因为我们的接收是需要在中断回调函数里面完成的。

单片机通过串口发送

在这里插入图片描述
先可以不用写printf,待会我会讲,我们先进行测试使用HAL_UART_Transmit这个函数,如果没问题串口助手上就可以看到写入的内容(记得波特率设置正确)

HAL_UART_Transmit(&huart1,"hello world\r\n",sizeof("hello world\r\n"),50);


我们在使用的时候会发现很不方便如果单单只用HAL_UART_Transmit的话,如果你要打印变量还得用sprintf把想要的变量加进缓存区再一起发送出去,所以我们使用重定向printf。

int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

在这里插入图片描述
然后还有最重要的一点,你使用printf一定要打开微库,一定要!!!!!!!
在这里插入图片描述
然后你的printf就可以将串口进行printf那些功能了,就像刚才我上面写的那样:
在这里插入图片描述
在这里插入图片描述
printf完全没问题

单片机通过串口接收

如果使用接收的时候需要初始化一下中断:

HAL_UART_Receive_IT(&huart1,rx_buff,1);

在这里插入图片描述
这里的rx_buff是中断接收到会存放的缓存区,后面的1就是每次中断接收1个字符,如果发送了10个字符,就需要十次中断,当触发中断后我们需要在回调函数里面进行操作:
我马上讲在什么地方找回调函数在这里插入图片描述
我们需要用到的就是这个回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart -> Instance == USART1)
	{
		//接收到的串口一发来的东西就可以在这里进行逻辑操作
	}
	HAL_UART_Receive_IT(&huart1,rx_buff,1);//这个不要忘记了,如果没有中断就只能发生一次
}

以上就是串口的部分

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐