串口发送
一、新建工程(略)
配置好时钟,文件
二、打开串口
串口为异步串口,配置Baud Rate(比特率),Word Length(字长:数据位和校验位的长度之和)
Parity(校验位,none为无校验,even为偶校验,odd为奇校验)
Stop Bits(停止位)
这样我们就完成了协议的配置,然后生成代码(如果自己的IO口不对,则需要在右边的芯片引脚上找到自己需要的IO口选择串口功能)
三、在mian.c文件的while中写入阻塞式发送的函数 HAL_UART_Transmit
HAL_UART_Transmit(&huart1,(uint8_t*)"hello",5,0xFFFF);
HAL_Delay(1000);
四、编译上传一下,打开串口调试软件并依照之前配置的相应参数进行修改,最后打开串口,这样就可以与串口进行通信了
串口接收
一、要进行串口接收,首先我们需要一块内存空间来存储收到的数据,所以我们定义一个数组,然后使用一个接收的函数
uint8_t buf[5];
HAL_UART_Receive(&huart1,buf,3,0xFFFF);
//因为我们要看到我们发送的数据正确与否,所以我们要把串口接收到的数据发送回来,于是我们加上
HAL_UART_Transmit(&huart1,buf,3,0xFFFF);
二、编译上传代码,打开串口,发送三个字符,就可以看到串口发送回来的字符了
中断方式进行串口收发
一、在cube中打开中断,调整优先级,生成代码
二、在while中写入中断发送的函数
HAL_UART_Transmit_IT(&huart1,(uint8_t*)"Hello",5);
三、在while中调用一个中断的接收函数,同样我们需要
uint8_t buffer[5];
HAL_UART_Receive_IT(&huart1,buffer,3);
由于有可能接收到数据的时候定义的这个局部变量已经被销毁了,没有办法进行保存,
所以我们需要把这个数组定义成全局变量
四、当接收完指定数量的字节之后,会调用这样的一个回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*huart)
这时我们就可以把发送中断的语句弄到while(1)之前
这样后续的操作都是有串口中断进行的
五、上传代码看看效果
DMA处理串口收发
一、打开cube,添加DMA,生成代码
二、我们万全可以把中断收发的函数换成DMA收发的函数
三、编译上传