蓝桥杯嵌入式:串口的使用(五)
蓝桥杯嵌入式串口的使用
·
蓝桥杯嵌入式:串口的使用(五)
本文带你速攻蓝桥杯嵌入式的发送和接收;
我们在比赛时用的开发板的串口一般都是串口一(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);//这个不要忘记了,如果没有中断就只能发生一次
}
以上就是串口的部分
更多推荐



所有评论(0)