你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H745I-DISCO串口通信,输入输出

[复制链接]
背影101 发布时间:2025-4-21 14:36

通过串口实现串口发送数据,接收区接收数据

1、配置STM32时钟(不细说了)

2、配置USART3出口信息

image.png

配置里面DMA如下图,勾选FIFO

image.png

中断NVIC勾选如下图

image.png

查看中断

image.png

然后可以生成代码。

在USART.c文件里面添加 重定向c库函数printf

ifdef GNUC

define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

else

define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

endif

PUTCHAR_PROTOTYPE

{

HAL_UART_Transmit(&huart3,(uint8_t *)&ch,1,0xFFFF);//阻塞方式打印

return ch;

}

在main.c函数里面添加代码

define RXBUFFERSIZE 256 //最大接收字节数

char RxBuffer[RXBUFFERSIZE]; //接收数据

uint8_t aRxBuffer; //接收中断缓冲

uint8_t Uart8_Rx_Cnt = 0; //接收缓冲计数

在主函数里面添加

HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1); //启动串口中断

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(&huart3, (uint8_t *)"数据溢出", 10,0xFFFF);

}

else

{

RxBuffer[Uart8_Rx_Cnt++] = aRxBuffer;   //接收数据转存

if((RxBuffer[Uart8_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart8_Rx_Cnt-2] == 0x0D)) //判断结束位

{

    printf("Uart3收到的数据:\n\r");

    HAL_UART_Transmit(&huart3, (uint8_t *)&RxBuffer, Uart8_Rx_Cnt,0xFFFF); //将收到的信息发送出去

    while(HAL_UART_GetState(&huart3) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束

    Uart8_Rx_Cnt = 0;

    memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组

}

}

HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1); //再开启接收中断 }

效果如下图

video_20250421_143248-c-1745217258127.gif

收藏 评论0 发布时间:2025-4-21 14:36

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版