常用函数介绍
串口发送/接收函数:
- HAL_UART_Transmit(); 串口发送数据,使用超时管理机制
- HAL_UART_Receive(); 串口接收数据,使用超时管理机制
- HAL_UART_Transmit_IT(); 串口中断模式发送
- HAL_UART_Receive_IT(); 串口中断模式接收
HAL_StatusTypeDef HAL_UART_Transmit ( UART_HandleTypeDef *huart , uint8_t * pData , uint16_t Size , uint32_t Timeout )
作用:以阻塞的方式发送指定字节的数据
- 形参 1 :UART_HandleTypeDef 结构体类型指针变量
- 形参 2:指向要发送的数据地址
- 形参 3:要发送的数据大小,以字节为单位
- 形参 4:设置的超时时间,以ms单位
HAL_StatusTypeDef HAL_UART_Receive_IT ( UART_HandleTypeDef * huart , uint8_t * pData , uint16_t Size )
作用:以中断的方式接收指定字节的数据
- 形参 1 是 UART_HandleTypeDef 结构体类型指针变量
- 形参 2 是指向接收数据缓冲区
- 形参 3 是要接收的数据大小,以字节为单位
此函数执行完后将清除中断,需要再次调用以重新开启中断。
串口中断回调函数:
- HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数
- HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //发送中断回调函数
- HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //接收中断回调函数
状态标记变量:
USART_RX_STA
从
0
开始,串口中断接收到一个数据(一个字节)就自增
1
。当数据读取全部
OK
时候(回车和换行
符号来的时候),那么
USART_RX_STA
的最高位置
1
,表示串口数据接收全部完毕了,然后
main
函数里面可以处理数据了。
![](https://i-blog.csdnimg.cn/blog_migrate/74be5bdd7f0f84bb7032131142d9e774.png)
串口接收中断流程
串口实验(非中断)
需求:
接受串口工具发送的字符串,并将其发送回串口工具。
硬件接线:
TX -- A10RX -- A9一定要记得交叉接线!!
串口配置:
1. 选定串口
2. 选择模式
异步通讯
![](https://i-blog.csdnimg.cn/blog_migrate/33f107598350de239074e15cb2f47746.png)
3. 串口配置
4. 使用MicroLIB库
从魔术棒打开,这个勾勾一定要打上,否则 printf 无法重映射!
5. 代码实现:
#include <stdio.h>
#include <string.h>
unsigned char cmd[32] = {0};
int fputc(int cmd,FILE *f)
{
unsigned char tmp[1] = {cmd};
HAL_UART_Transmit(&huart1,tmp,1,0xffff);
return cmd;
}
main函数里:
unsigned char cmd[32] = {0};
HAL_UART_Transmit(&huart1,"hello world\n",sizeof("hello world\n"),100);
while (1)
{
HAL_UART_Receive(&huart1,cmd,20,100);
//HAL_UART_Transmit(&huart1,cmd,sizeof(cmd),100);
printf(cmd);
memset(cmd,'\0',sizeof(cmd));
}