之————04串口通信测试
串口通信不熟,一边试一边学的,还有些问题没有理解。
一、软件配置
1.1先在STM32cubeMx中新建立项目,选择好对应的开发板,并进行一下简单的配置。
1.2 设置时钟为外部时钟,同时设置串口为6号端口。
1.3 打开原理图看到PC6与PC7在CN7连接器上
1.4 用串口线进行连接,连接三根线分别是Tx,Rx与GND(注意连接线要找对,之前我的PC7插错了位,不论怎么写也进不了中断,发送没有问题,连接中断进不去,后来才发现线接错位了。
1.5 配置时钟,由于启动外部晶振,直接将时钟设置为100MB,由于前面配置了外部时钟,选择HSE时钟源,不然会死在时钟
1.6对串口进行配置可采用默认
1.7配置串口中断
1.8进行输出配置,方便输出文件。
二、编程部分
2.1 串口通信相关库
主要数据类型:
UART_HandleTypeDefUartHandle;
主要HAL函数:
初始化函数:
HAL_StatusTypeDef HAL_UART_Init ( UART_HandleTypeDef * huart );
void HAL_UART_MspInit ( UART_HandleTypeDef *huart );
回调函数:
void HAL_UART_TxCpltCallback( UART_HandleTypeDef * UartHandle );
void HAL_UART_RxCpltCallback( UART_HandleTypeDef* UartHandle );
void HAL_UART_ErrorCallback( UART_HandleTypeDef*UartHandle )
操作函数:
HAL_StatusTypeDef HAL_UART_Transmit_IT( UART_HandleTypeDef*huart, uint8_t *pData, uint16_t Size );
HAL_StatusTypeDef HAL_UART_Receive_IT( UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size );
中断响应函数:
void USARTx_IRQHandler();
2.2 程序说明
PC向串口发送一串数据,串口每接收到一个字符就存缓冲区中,当缓冲区中存入结束标识后。串口将接收到的数据又发送回PC。
2.2.1 程序开始时要开启一次接收中断,这样才能接收到串口发来的数据
2.2.2 前面的配置已开启了串口的所有中断,串口在发送、接收、错误都会产生中断。
2.2.3 在MAIN函数中重新定义回调函数后,达到中断要求会自动调用重写的回调函数,所以重写回调函数名字与参数要与系统中一致。(之前自在全局中断中又调用了回调函数,运行就不对)。
2.3正式写程序(参数网上)
2.3.1 main.c中定义变量
不知道为什么,用注解掉的方法接收数据接收完后,一直在循环那里一直等待接收,不能完成,
2.3.2 重写回调函数
2.3.3 开接收中断,已方便接收
三、程序测试
发送字串,串口接收到后将收到的字串返回来。注意回调中要检查到的数据有回车符与换行符所以在输入的时候要加一个回车。
我就来看看 。