目录
一、前言
本篇文章由于介绍串口传输接受一串字符,谨以此文记录自己的学习收获,同时也希望能够帮助到与我有相同问题的朋友。
二、思路
在串口学习中,发现接收串口的字符只能接收一个,对于蓝桥嵌入式第十三届省赛密码锁的题目,我们需要的是接收一串字符,并且进行判断+修改。
所以,我们需要利用数组将接受到的每个字符都存起来,但字符串接受一次之后便会打开串口中断处理函数,所以我们在串口中断处理函数中还需要做一个处理。
具体代码如下:
1、时钟配置
以PA2为例,先进行时钟配置。(题目要求输出1kHz的频率)
2、代码:
char val[30];//用于存储字符 uint8_t rec;//用于接收每个字符 ucahr uart_x=0;//数组索引 main(){ HAL_UART_Receive_IT(&huart2,&rec,1);//首先接收第一个字符,同时开启串口中断处理函数 while(1){ //防止接收不完整。 if(uart_x>0){ int temp = uart_x; HAL_Delay(1); if(temp == uart_x) uart_test(); } } } HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { val[uart_x++]=rec;//每接收一个,便存入该数组,同时数组索引后移一位。 HAL_UART_Receive_IT(&huart1,&rec,1);//继续接收字符,开启中断处理。类似递归。 } void uart_test(void){ if(uart_x>0){//索引不在0或者0以前的位置,说明接收到字符了。 //对接收到的字符进行处理。 } //使用完成后将数组及索引清零 uart_x=0; memset(val,0,30); }
三、总结
本篇文章只分享思路以及实现模板,其余的大家可自行补充。
文章仅用于自我记录,若能帮助到你,那将是我的荣幸。