[STM32U3] 【每周分享】【STM32U385RG 测评】+串口发送、接收数据
上篇串口通讯只是打印叔数据,这篇更进一步,将串口发送什么,就打印什么出来
一、查看原理图,确定自己需要的串口信息
还是一样的串口1
二、开始配置软件
上面基础配置结束之后,增加DMA以及NVIC配置
时钟可以根据自己情况,去调整,也可以默认。
到此配置结束,开始生成代码
三、代码调试
1、usart.c中增加如下代码
#include <stdio.h>
/* USER CODE BEGIN 1 */
#else
#definePUTCHAR_PROTOTYPEintfputc(intch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);//阻塞方式打印
returnch;
}
/* USER CODE END 1 */
2、main.c中增加如下代码
#include <stdio.h>
/* USER CODE BEGIN 0 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* 防止未使用的参数编译警告 */
UNUSED(huart);
/* 注意: 需要回调时,不应修改该函数、
可在用户文件中实现 HAL_UART_TxCpltCallback */
if(Uart8_Rx_Cnt >= 255) //溢出判断
{
Uart8_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer));
HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF);
}
else
{
RxBuffer[Uart8_Rx_Cnt++] = aRxBuffer; //接收数据转存
if((RxBuffer[Uart8_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart8_Rx_Cnt-2] == 0x0D)) //判断结束位
{
printf("USART1收到的数据:\n\r");
HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart8_Rx_Cnt,0xFFFF); //将收到的信息发送出去
while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
Uart8_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
}
/* USER CODE END 0 */
四、运行效果
将程序下载demo板后,打开串口软件,查看效果
代码:
代码Core.zip(22.88 KB, 下载次数: 0)
---------------------
作者:LiuDW091
链接:https://bbs.21ic.com/icview-3471474-1-1.html?_dsign=08d70edf
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
