沁恒ch32V208处理器开发(四)串口通信

这篇具有很好参考价值的文章主要介绍了沁恒ch32V208处理器开发(四)串口通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

串口资源

资源配置

CH32V208 系列,是基于 RISC-V 指令架构设计的 32 位 RISC 内核 MCU,根据封装的不同,可用的USART串口资源如下表所示:

沁恒ch32V208处理器开发(四)串口通信,嵌入式,软件,c,单片机,c语言,嵌入式,物联网且USART具有如下主要特征:
(1)全双工或半双工的同步或异步通信
(2) 支持分数波特率发生器,最高 9Mbps
(3)可编程数据长度、停止位长度
(4)支持 LIN,IrDA 编码器,智能卡
(5)支持 DMA
(6)支持多种中断

其内部模块图实现如下:
沁恒ch32V208处理器开发(四)串口通信,嵌入式,软件,c,单片机,c语言,嵌入式,物联网

同步模式

和其他单片机不同的是,ch32V208处理器的USART还支持同步模式,就是说系统在使用 USART 模块时可以输出时钟信号。在开启同步模式对外发送数据时,CK引脚会同时对外输出时钟。 要开启同步模式,只需要对控制寄存器 2(R16_USARTx_CTLR2)的 CLKEN 位置位,即可,但有两点注意:
(1)开启同步模式同时需要关闭LIN 模式、智能卡模式、红外模式和半双工模式,即保证 SCEN、HDSEL 和 IREN 位处于复位状态,这三位在控制寄存器 (R16_USARTx_CTLR3)中。
(2)USART 模块同步模式只工作在主模式,即 CK 引脚只输出时钟,不接收输入;
只在 TX 引脚输出数据时输出时钟信号;

单线半双工模式

半双工模式支持使用单个引脚(只使用 TX 引脚)来接收和发送,TX 引脚和 RX 引脚在芯片内部连接。 开启半双工模式的方式是对控制寄存器 3(R16_USARTx_CTLR3)的 HDSEL 位置位,但同时需要关闭 LIN 模式、智能卡模式、红外模式和同步模式,即保证 SCEN、CLKEN 和 IREN 位处于复位状态,这三位在控制寄存器 2 和 3(R16_USARTx_CTLR2 和 R16_USARTx_CTLR3)中。 设置成半双工模式之后,需要把 TX 的 IO 口设置成浮空输入或开漏输出高模式。在 TE 置位的情况下,只要将数据写到数据寄存器上,就会发送出去。

中断

ch32V208处理器的USART 模块支持多种中断源,包括发送数据寄存器空(TXE)、CTS、发送完成(TC)、接收数据就绪(TXNE)、数据溢出(ORE)、线路空闲(IDLE)、奇偶校验出错(PE)、断开标志(LBD)、噪声(NE)、多缓冲通信的溢出(ORE)和帧错误(FE)等等。

DMA

ch32V208处理器的USART 模块支持 DMA 功能,可以利用 DMA 实现快速连续收发。当启用 DMA 时,TXE 被置位时,DMA就会从设定的内存空间向发送缓冲区写数据。当使用 DMA 接收时,每次 RXNE 置位后,DMA 就会将接收缓冲区里的数据转移到特定的内存空间。

串口的初始化

ch32V208处理器的USART通信模式较多,下面以最常用的双工通信模式为例来介绍实现过程,本例程中,使用USART1和USART2,通过外部交叉连接实现全双工的串口通信功能,实现代码如下

void USARTx_CFG(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
USART_InitTypeDef USART_InitStructure = {0};

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);



/* USART1 TX-->B.6 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; /* Only Configure TX Pin */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);


/* USART2 TX-->A.2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; /* Only Configure TX Pin */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);


USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART1, &USART_InitStructure);
USART_Init(USART2, &USART_InitStructure);


USART_Cmd(USART1, ENABLE);
USART_Cmd(USART2, ENABLE);

USART_HalfDuplexCmd(USART1, ENABLE);
USART_HalfDuplexCmd(USART2, ENABLE);

}

串口通信的实现

双串口的收发通信实现包括两部分,USART1的发送和USART2的接收,以及USART1的发送和USART1的接收两个过程,实现方法是完全一样的,USART1—>USART2的实现如下:文章来源地址https://www.toymoban.com/news/detail-646532.html

 while(TxCnt1 < TxSize1) /* USART1--->USART2,TxSize1为发送个数 */
    {
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) 
           /* 等待串口1的当前数据发送完成 */
        {
        }
        USART_SendData(USART1, TxBuffer1[TxCnt1++]);
       
       //等待接收完成
        while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET)
        {
        }
        RxBuffer2[RxCnt2++] = USART_ReceiveData(USART2); 
        //把接收数据存放到usart2的接收缓冲区
  }

到了这里,关于沁恒ch32V208处理器开发(四)串口通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置

    沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 沁恒 CH32V208(四): CH32V208 网络DHCP示例代码分析 沁恒 CH32V208(五): CH32V208 运行FreeRTOS示例的说明 CH32V208系列是沁恒

    2024年02月02日
    浏览(21)
  • 沁恒CH32V307VCT6最小系统板/开发板开源

    沁恒CH32V307VCT6最小系统板,引出了所有IO口,一个Type-C连接到USB2.0全速OTG接口,一个Flash芯片 型号W25Q64 容量64Mbit 连接到SPI2接口,板上还有TL432电压基准1.25V(实测1.246V左右)可通过跳线连接到PC3的AD13,还有3.29V基准通过0欧电阻可连接到ADC参考电压VREF。 画了个 MSP430F149的最小系统

    2024年02月12日
    浏览(23)
  • 沁恒CH32V307母板+OPA4377运放模块-开源

    南京沁恒微电子股份有限公司是一家国产通讯接口芯片和全栈MCU芯片公司。专注于连接技术和MCU内核研究,基于自研收发器PHY和处理器IP的全栈研发模式,取代传统的外购IP整合模式,提供以太网、蓝牙无线、USB和PCI类等接口芯片,及集成上述接口的连接型/互联型/无线型全栈

    2023年04月09日
    浏览(35)
  • 沁恒CH32V307使用记录:使用TIM输出PWM信号

    使用TIM输出PWM信号是单片机中比较常用的一个功能。这篇文章将对CH32V307中相关内容进行说明。 本文使用沁恒官方的开发板 (CH32V307-EVT-R1沁恒RISC-V模块MCU赤兔评估板) 进行演示。 CH32V307拥有多个定时器,只有通用定时器和高级定时器支持PWM输出功能,需要注意的是不同的定

    2024年02月17日
    浏览(40)
  • 沁恒CH32V307单片机入门(01):基础说明与流程体验

    工作这几年单片机主要就接触过 Atmel、Renesas、Microchip、ST 这些厂家的,最近几年因为内部外部的各种因素单片机的价格和供应都挺不稳定的,将来会发生什么也不好说。另外这些年国内的单片机发展也挺快的。所以准备试试国产的单片机。 这里准备使用南京沁恒的CH32V307为基

    2024年01月25日
    浏览(37)
  • 第三十二章 开发Productions - ObjectScript Productions - 定义警报处理器 - 使用路由警报处理器

    如果需要通过多种输出机制联系用户,警报处理器应该是一个业务流程,用于确定如何在消息中路由 Ens.AlertReques 。在这种情况下, Productions 必须为每个输出机制包含一个额外的业务操作,并且警报处理器将消息转发到这些业务操作。 要将警报处理器定义为路由流程,请创建

    2024年02月08日
    浏览(33)
  • 基于LoRa技术的STM32处理器无线程序升级系统设计(学习)

    基于LoRa技术的STM32处理器无线程序升级系统设计 设计并实现了一款基于LoRa技术对STM32F767系列处理器通过无线方式升级程序的系统。该系统的硬件结构包括:无线发送端、无线接收端及待升级程序的STM32F767处理器3个部分。 发送端将程序的数据文件通过LoRa技术传递给接收端,

    2024年02月12日
    浏览(23)
  • 玩客云装新版青龙面板方法首发,2023年亲测,所有的arm32位处理器终于可以装新版青龙了

    先把旧版的青龙面板容器和镜像都删了,没装过的不用删 ssh连接玩客云或其他arm32位机器,先下载这个文件 重启docker  分别一行一行输入,回车 等待5-10分钟后 装青龙最新版

    2024年02月12日
    浏览(101)
  • MTK联发科天玑9000旗舰5G移动平台处理器_MT6983芯片定制开发

    MT6983天玑9000采用台积电4纳米工艺制程,CPU采用“1+3+4”三丛集Armv9架构,APU性能提升,ISP处理速度提升,最高支持3.2亿像素摄像头,采用Mali-G710十核GPU,搭载R16 5G调制解调器。  MT6983天玑9000芯片基本概述: 性能提升 9000采用台积电4纳米工艺制程、Armv9架构,采用“1+3+4三丛集

    2024年02月05日
    浏览(39)
  • RISC-V处理器的设计与实现(三)—— 上板验证(基于野火征途Pro开发板)

    目录 文章传送门 一、添加串口 二、上板验证 三、总结与思考 RISC-V处理器的设计与实现(一)—— 基本指令集_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现(二)—— CPU框架设计_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现(三)—— 上板验证_Patarw_Li的博客-CSDN博客

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包