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

【AS32X601驱动系列教程】USART_串口通讯详解

国科安芯的AS32系列MCU芯片集成7路USART,能够灵活地与外部设备进行全双工数据交换,满足外部设备对工业标准 NRZ 异步串行数据格式的要求。USART 通过小数波特率发生器实现了多种波特率。 USART 不仅支持同步单向通信和半双工单线通信,以及 LIN(局域互连网络)和调制解调器操作 (CTS/RTS) 通过配置多个缓冲区使用 DMA(直接存储器访问)可实现高速数据通信,其通信数据格式如下:

硬件设计

评估板板载了一颗CH340 usb转ttl芯片用于串口通讯验证,串口接在MCU串口0,对外通过usbmini标准接口与上位机连接。

软件设计

本小节实现上位机与板卡的双向数据收发,板卡接收上位机数据,并原数据返回。

初始化流程

  • 使能USART以及对应gpio时钟
  • 配置gpio复用为usart功能
  • 初始化gpio结构体
  • 初始化usart结构体
  • 调用库函数实现收发

代码分析

首先进行串口初始化,在Bsp文件夹中新建新建print.c和print.h,之后添加到工程目录下,在log.c中添加初始化代码:

  1. void User_Print_Init(uint32_t BaudRate)
  2. {
  3.     USART_InitTypeDef USART_InitStructure;
  4.     GPIO_InitTypeDef  GPIO_InitStructure;
  5.     
  6.     GPIOD_CLK_ENABLE();
  7.     USART0_CLK_ENABLE();
  8.         
  9.     /* Set GPIO multiplex mapping */
  10.     GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART0);       /* USART0_TX */
  11.     GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART0);       /* USART0_RX */
  12.     /* GPIO Configure */
  13.     GPIO_InitStructure.GPIO_Pin       = GPIO_Pin_8;             
  14.     GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_OUT;
  15.     GPIO_InitStructure.GPIO_OType     = GPIO_Out_PP;
  16.     GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_4_5mA;
  17.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  18.     GPIO_InitStructure.GPIO_Pin       = GPIO_Pin_9;             
  19.     GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_IN;
  20.     GPIO_InitStructure.GPIO_IType     = GPIO_IN_FLOATING;
  21.     GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_4_5mA;
  22.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  23.     USART_DeInit(USART0);
  24.     USART_StructInit(&USART_InitStructure);
  25.     /* Initializes the USART0 */
  26.     USART_InitStructure.USART_BaudRate     = BaudRate;
  27.     USART_InitStructure.USART_WordLength   = USART_WordLength_8b;
  28.     USART_InitStructure.USART_StopBits     = USART_StopBits_1;
  29.     USART_InitStructure.USART_Parity       = USART_Parity_No;
  30.     USART_InitStructure.USART_Mode         = USART_Mode_Rx | USART_Mode_Tx;
  31.     USART_InitStructure.USART_OverSampling = USART_OverSampling_16;
  32.     USART_Init(USART0, &USART_InitStructure);
  33.     USART_Cmd(USART0, ENABLE);
  34. }

首先,我们设置了一个形参用于配置串口通讯波特率,该波特率计算同样是通过系统时钟初始化所读取的总线时钟函数提供计算基础,因此当使用串口时,切勿漏掉该函数,否则需要手动输入时钟进行计算。

之后开启GPIOD和USART0的外设时钟,注意,在此之前不要忘了在系统时钟初始化中开启两个外设挂载的总线时钟。

然后调用库函数配置两个管脚复用为串口功能,然后初始化TX引脚为推挽输出,RX管脚为浮空输入。

最后配置USART0初始化结构体,功能配置为8位数据位,1位停止位,无校验,使能串口。

  1.     while(1)
  2.     {
  3.         if(SET == USART_GetFlagStatus(USART0, USART_FLAG_RXFNE))
  4.         {
  5.           usart_data = USART_ReceiveData(USART0);
  6.           USART_SendData(USART0,usart_data);
  7.         }
  8.     }

在主函数中,循环检测接收状态,当接收到数据时,调用接收函数读取数据,并通过串口发送函数原路返回。

除此之外,串口可通过中断方式和DMA方式进行数据收发,具体操作在中断和DMA章节进行具体介绍。

评估板验证

编译烧录代码,打开串口调试工具并连接串口线,观察最终效果。

http://www.xdnf.cn/news/615727.html

相关文章:

  • 传统工程项目管理与业财一体化管理的区别?
  • 【知识点】关于vue3中markRow、shallowRef、shallowReactive的了解
  • [20250522]目前市场上主流AI开发板及算法盒子的芯片配置、架构及支持的AI推理框架的详细梳理
  • 深入解析 Linux 进程管理
  • 智能建筑时代来临,楼宇自控技术成智能建筑标配新趋势
  • redis主从复制架构安装与部署
  • 【跨端框架检测】使用adb logcat检测Android APP使用的跨端框架方法总结
  • 【通用智能体】Intelligent Internet Agent (II-Agent):面向复杂网络任务的智能体系统深度解析
  • 1.1 自动控制的一般概念
  • 【自定义类型-联合和枚举】--联合体类型,联合体大小的计算,枚举类型,枚举类型的使用
  • 电脑 IP 地址修改工具,轻松实现异地登陆
  • 如何实现 ERP 系统与淘宝订单、商品、物流接口对接
  • 大厂技术大神远程 3 年,凌晨 1 点到 6 点竟开会 77 次。同事一脸震惊,网友:身体还扛得住吗?
  • swagger-mcp-server
  • 《GDB 调试实战指南:无源码程序分析技巧与命令详解》
  • P3205 [HNOI2010] 合唱队
  • AI 驱动近红外光谱预处理:从数据清洗到特征工程的自动化
  • 2025版CansCodeAPI管理系统:免费下载,全新升级!
  • 八股--SSM(2)
  • 海外交友APP语言切换模块设计
  • 【AI大模型研究报告】2024年中国工业大模型行业发展研究报告
  • 善假于物也
  • 怎么判断一个Android APP使用了Xarmarin这个跨端框架
  • MySQL与Oracle六大方面之比较
  • [Java恶补day4] 283. 移动零
  • 第二十一章 TIM——通用定时器
  • [原理理解] 超分使用到的RAM模型和LLAVA模型
  • Rules and Monetization
  • 5.2.3 使用配置文件方式整合MyBatis
  • 谷歌移动端排名和电脑端差距大?做SEO优化要选哪个?