当前位置: 首页 > news >正文

STM32CubeMX【串口收发USART】

第一步,配置cubemx

配置好点右上角生成

第二步,串口方式

阻塞式发送

英文、中文正常、浮点有口

/* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();//配置完自动生成的

发送到串口助手上 

while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///等想发的数据都发完了才会结束//5为字符串长度,0xFFFF为超时时间超过这个时间其余的数据就不发了HAL_UART_Transmit(&huart1,(uint8_t*)"Hello",5,0xFFFF);//&huart1是串口句柄 huart1存了串口的所有数据//(uint8_t*)"Hello"【字符串常量】需要传uint8_t*HAL_Delay(1000);}

从串口助手上发到单片机,再发回串口助手 

while(1){
uint8_t buf[5];//缓存一下//接收数据,并返回到串口助手
HAL_UART_Receive(&huart1,(uint8_t*)buf,3,0xFFFF);
HAL_UART_Transmit(&huart1,(uint8_t*)buf,3,0xFFFF);
}

 printf函数进行串口发送

#include <stdio.h>//引入标准库头文件
//重写fputc,printf內部是通过它调用的
int fputc(int c,FILE*stream)
{uint8_t ch[1]={c};HAL_UART_Transmit(&huart1,ch,5,0xFFFF);return c;
}
//重写fgetc,scanf內部是通过它调用的
int fputc(FILE*stream)
{uint8_t ch[1];HAL_UART_Receive(&huart1,ch,1,0xFFFF);return ch[0];
}
while(1){
int val=0;
scanf("%d",&val);
printf("%d\r\n",val);//回车并换行}

使用中断方式(每个字节都会进入一次中断)

不需要等待就能发送完毕

先去NVIC使能中断,调优先级(编号越大优先级越低)

uint8_t buffer[5];//定义成全局变量防止被销毁int main()
{
//第一次触发中断接收语句
HAL_UART_Receive_IT(&huart1,buffer,3);while(1){}
return 0;
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{//当完成了所有数据的发送时就会进入这个回调
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{//每发一个字节都会进入中断HAL_UART_Transmit_IT(&huart1,(uint8_t*)buffer,3);//不需要等待就能发送完毕//接收数据,并返回到串口助手HAL_UART_Receive_IT(&huart1,buffer,3);
}

DMA(搬运数据)方式(固定数据够了才发)

固定长度数据

uint8_t buffer[5];//定义成全局变量防止被销毁int main()
{
//第一次触发中断接收语句,dma与中断不同是会接收完固定长的数据
HAL_UART_Receive_DMA(&huart1,buffer,3);while(1){}
return 0;
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{//当完成了所有数据的发送时就会进入这个回调
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{//不用每发一个字节都会进入中断HAL_UART_Transmit_DMA(&huart1,(uint8_t*)buffer,3);//不需要等待就能发送完毕//接收数据,并返回到串口助手HAL_UART_Receive_DMA(&huart1,buffer,3);
}

空闲中断*

不定长接收,基于DMA的修改

uint8_t buffer[5];//定义成全局变量防止被销毁int main()
{
//第一次触发中断接收语句,dma与中断不同是会接收完固定长的数据
HAL_UART_Receive_DMA(&huart1,buffer,3);__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);while(1){}
return 0;
}

若不是0就是空闲中断了

extern uint8_t buffer[5];//it.c文件里得声明一下

 

3-用来获取DMA计数值

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{//当完成了所有数据的发送时就会进入这个回调
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{//不用每发一个字节都会进入中断HAL_UART_Transmit_DMA(&huart1,(uint8_t*)buffer,3);//不需要等待就能发送完毕//接收数据,并返回到串口助手HAL_UART_Receive_DMA(&huart1,buffer,3);
}

第三步,串口调试助手 

串口接线A10RX接TX,A9TX接RX

需要下USB转TTL的串口驱动,下正点原子的XCOM

保证波特率、数据位....都一致,(该串口助手是GB2312编码

keil中应该也得设置成GB2312编码才能正常传输中文

http://www.lryc.cn/news/465110.html

相关文章:

  • 【学术会议投稿】Java Web开发实战:从零到一构建动态网站
  • [Unity]内存优化
  • FreeRTOS工程创建,创建多任务程序,基于汇编对ARM架构的简单理解
  • C++STL--------list
  • M1 Mac打开Jupyter notebook
  • docker 仓库之harbor详解
  • 【环境变量】windons的Path
  • go语言里的切片
  • 革新你的智能体验:AIStarter 3.1.1正式版现已上线【安全认证】ai应用市场,数字人,ai绘画,ai视频,大模型,工作流因有尽有
  • 【练习17】数组中的最长连续子序列
  • 2024 最适合 Web 开发者的 9 款 Chrome 扩展
  • React综合指南(二)
  • XML\XXE漏洞基本原理
  • uniapp小程序自定义聚合点
  • Spring Boot在线考试系统:JavaWeb技术的应用案例
  • Linux在服务器多节点下面如何快速查找日志
  • 模数转换ADC0804的应用
  • CBAM中关于碳关税抵销
  • 2.5 windows xp,ReactOS系统快速系统调用的实现
  • AI助力广交会,人工智能在制造业有哪些应用场景?
  • ElementPlus-Table表格-单选--TypeScript进阶篇
  • 三大智能体平台深度对比:字节Coze、百度AppBuilder、智谱智能体优劣解析
  • 【Flutter】基础入门:自定义Widget
  • 程序员日志之DNF手游装备武器升级55级攻略
  • Java项目-基于springcloud框架的分布式架构网上商城系统项目实战(附源码+文档)
  • ComfyUI_LayerStyle节点介绍
  • SQL Injection | SQL 注入 —— 时间盲注
  • 最新开发项目H5商城小程序源码系统 带源代码安装包以及搭建部署教程
  • 5大绝招揭秘:Cursor如何让RESTful API开发效率提升300%?
  • 鸿蒙开发,在 ArkTS 中,如何使用 Column 实现垂直居中对齐