0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32单片机UART基本数据收发功能介绍

jf_pJlTbmA9 来源:武汉芯源半导体 作者:武汉芯源半导体 2023-10-24 16:50 次阅读

通用异步收发器(Universal Asynchronous Receiver/Transmitter:UART),是一种通用串行数据总线,常用于系统内各子模块间的数据交换。

以CW32L083为例,CW32L083 内部集成 6 个通用异步收发器 (UART),支持异步全双工、同步半双工和单线半双工模式,支持硬件数据流控和多机通信;可编程数据帧结构,可以通过小数波特率发生器提供宽范围的波特率选择。UART 控制器工作在双时钟域下,允许在深度休眠模式下进行数据的接收,接收完成中断可以唤醒 MCU 回到运行模式。

一、主要功能

• 支持双时钟域驱动:配置时钟 PCLK;传输时钟 UCLK。

• 可编程数据帧结构:数据字长:8、9 位,LSB 在前;校验位:无校验、奇校验、偶校验;停止位长度:1、1.5、2 位 。

• 16 位整数、4 位小数波特率发生器 。

• 支持异步全双工、同步半双工、单线半双工 。

• 支持硬件流控 RTS、CTS。

• 支持直接内存访问 (DMA) 。

• 支持多机通信,自动地址识别 。

• 6 个带中断标志的中断源 。

• 错误检测:奇偶校验错误、帧结构错误 。

• 低功耗模式下收发数据,中断唤醒 MCU。

1.功能框图

UART 控制器挂载到 APB 总线上,配置时钟域 PCLK,固定为 APB 总线时钟 PCLK,用于寄存器配置逻辑工作;传输时钟域 UCLK,用于数据收发逻辑工作,其来源可选择 PCLK 时钟、外部低速时钟(LSE)以及内部低速时钟 (LSI)。双时钟域的设计更便于波特率的设置,支持从深度休眠模式下唤醒控制器。

wKgaomQ_T2KAOESiAAEBhJTPmIk861.jpg

2.UART中断

UART 控制器支持 6 个中断源,当 UART 中断触发事件发生时,中断标志位会被硬件置位,如果设置了对应的中断使能控制位,将产生中断请求。CW32L083 的一个 UART 模块使用一个系统 UART 中断,UART 中断是否产生中断跳转由嵌套向量中断控 制器 (NVIC) 的中断使能设置寄存器 NVIC_ISER 的相应位控制。系统 UART 中断示意图如下图所示:

wKgZomQ_Tx2AS4EXAABc1ZocmV4559.jpg

在用户 UART 中断服务程序中,应查询相关 UART 中断标志位,以进行相应的处理,在退出中断服务程序之前, 要清除该中断标志位,避免重复进入中断程序。各 UART 中断源的标志位、中断使能位、中断标志清除位或清除方法,如下表所示:

wKgZomQ_TxyAfVASAACzCkM0v08188.jpg

3.CH340介绍

CH340是一个USB总线的转接芯片,实现USB协议和UART协议的自动转换。

wKgZomQ_TxyAaCo1AACYC5dproU972.jpg

RTS#:MODEM联络输出信号,请求发送

UD+:直接连接USB总线的D+数据线

UD-:直接连接USB总线的D-数据线

V3:在3.3V电源电压时链接VCC输入外部电源,在5V电源电压时外接容量为100nF的退耦电容

VCC:正电源输入端,需要接100nF电源退耦电容

TXD:串行电路输出

RXD:串行数据输入,内置可控上拉和下拉电阻

CH340内置了独立的收发缓冲区,支持单工、半双工或者全双工异步串行通讯。串行数据包括1个低电平起始位、5、6、7或8个数据位、1个或2个高电平停止位,支持奇校验/偶校验/标志校验/空白校验。CH340支持常用通讯波特率:50、75、100、110、134.5、150、300、600、900、1200、1800、2400、3600、4800、9600、14400、19200、28800、33600、38400、56000、57600、76800、115200、128000、153600、230400、460800、921600、1500000、2000000等。串口发送信号的波特率误差小于0.3%,串口接收信号的允许波特率误差不小于2%。

二、实例演示

本实例采用CW32L083V8T6的StartKit单板,MCU的串口引脚(PA08/ PA09)和CH340对接,CH340通过USB接口和PC机对接,实现PC机软件和MCU通过UART双向通信功能。

单板启动后,处于等待数据接收状态,当有数据接收到后,产生UART接收中断,在中断中读取接收到的数据,然后将数据通过UART再发送回来,并清除中断标志位,然后等待接收下一个数据。

1.配置RCC系统时钟

voidRCC_Configuration(void) { //SYSCLK=HSI=8MHz=HCLK=PCLK RCC_HSI_Enable(RCC_HSIOSC_DIV6); //外设时钟使能 RCC_AHBPeriphClk_Enable(DEBUG_UART_GPIO_CLK,ENABLE); DEBUG_UART_APBClkENx(DEBUG_UART_CLK,ENABLE); }

2.GPIO配置

voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure={0}; //UARTTXRX复用 DEBUG_UART_AFTX; DEBUG_UART_AFRX; GPIO_InitStructure.Pins=DEBUG_UART_TX_GPIO_PIN; GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; GPIO_Init(DEBUG_UART_TX_GPIO_PORT, GPIO_InitStructure); GPIO_InitStructure.Pins=DEBUG_UART_RX_GPIO_PIN; GPIO_InitStructure.Mode=GPIO_MODE_INPUT_PULLUP; GPIO_Init(DEBUG_UART_RX_GPIO_PORT, GPIO_InitStructure); }

3.UART配置

voidUART_Configuration(void) { UART_InitTypeDefUART_InitStructure={0}; UART_InitStructure.UART_BaudRate=DEBUG_UART_BaudRate; UART_InitStructure.UART_Over=UART_Over_16; UART_InitStructure.UART_Source=UART_Source_PCLK; UART_InitStructure.UART_UclkFreq=DEBUG_UART_UclkFreq; UART_InitStructure.UART_StartBit=UART_StartBit_FE; UART_InitStructure.UART_StopBits=UART_StopBits_1; UART_InitStructure.UART_Parity=UART_Parity_No; UART_InitStructure.UART_HardwareFlowControl=UART_HardwareFlowControl_None; UART_InitStructure.UART_Mode=UART_Mode_Rx|UART_Mode_Tx; UART_Init(DEBUG_UARTx, UART_InitStructure); }

4.配置NVIC

voidNVIC_Configuration(void) { //优先级,无优先级分组 NVIC_SetPriority(DEBUG_UART_IRQ,0); //UARTx中断使能 NVIC_EnableIRQ(DEBUG_UART_IRQ); }

5.中断函数处理UART2/UART5

voidUART2_UART5_IRQHandler(void) { /*USERCODEBEGIN*/ uint8_tTxRxBuffer; if(UART_GetITStatus(CW_UART5UART_IT_RC)!=RESET)//获取UARTx中断标志位 { TxRxBuffer=UART_ReceiveData_8bit(CW_UART5;//通过UARTx接收一个数据(8bit) UART_SendData_8bit(CW_UART5TxRxBuffer);//通过UARTx发送一个数据(8bit) UART_ClearITPendingBit(CW_UART5UART_IT_RC);//清除UARTx中断标志位 } /*USERCODEEND*/ }

6.定义常量define

//UARTx #defineDEBUG_UARTxCW_UART5 #defineDEBUG_UART_CLKRCC_APB1_PERIPH_UART5 #defineDEBUG_UART_APBClkENxRCC_APBPeriphClk_Enable1 #defineDEBUG_UART_BaudRate9600 #defineDEBUG_UART_UclkFreq8000000 //UARTxGPIO #defineDEBUG_UART_GPIO_CLKRCC_AHB_PERIPH_GPIOB #defineDEBUG_UART_TX_GPIO_PORTCW_GPIOB #defineDEBUG_UART_TX_GPIO_PINGPIO_PIN_8 #defineDEBUG_UART_RX_GPIO_PORTCW_GPIOB #defineDEBUG_UART_RX_GPIO_PINGPIO_PIN_9 //GPIOAF #defineDEBUG_UART_AFTXPB08_AFx_UART5TXD() #defineDEBUG_UART_AFRXPB09_AFx_UART5RXD() //中断 #defineDEBUG_UART_IRQUART2_UART5_IRQn

7.UART中断方式接收数据

int32_tmain(void) { //配置RCC RCC_Configuration(); //配置GPIO GPIO_Configuration(); //配置UART UART_Configuration(); //配置NVIC NVIC_Configuration(); //使能UARTxRC中断 UART_ITConfig(DEBUG_UARTx,UART_IT_RC,ENABLE); UART_SendString(DEBUG_UARTx,"rnCW32L083UARTInterruptrn"); while(1) { //中断收发 } }

8、测试结果如下:当MCU收到上位机发送的数据后,再回传到上位机,UART功能正常。

wKgaomQ_TxyAF6d9AAEdQp8F0Rw192.jpg

来源:武汉芯源半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620847
  • 总线
    +关注

    关注

    10

    文章

    2706

    浏览量

    87216
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99961
  • 数据收发
    +关注

    关注

    0

    文章

    8

    浏览量

    7742
收藏 人收藏

    评论

    相关推荐

    基于CW32的门禁综合系统

    基于CW32单片机的门禁综合系统是一款功能强大的智能门禁解决方案,它提供了三种开锁方式:密码开锁、指纹开锁和刷卡开锁,为用户提供方便、安全的门禁控制。该系统的核心控制器采用了CW32
    的头像 发表于 12-28 11:43 1268次阅读
    基于<b class='flag-5'>CW32</b>的门禁综合系统

    使用CW32单片机通过ESP8266连接OneNET物联网平台

    这期视频向大家介绍如何使用CW32单片机通过ESP8266连接OneNET物联网平台,发送温湿度数据到平台,并接受平台的云控制。
    的头像 发表于 11-09 14:32 654次阅读

    【应用笔记】CW32 自举程序中使用的 ISP 协议

    提供的 ISP 模式,通过 UART 串口方便地实现对 CW32 微控制器片上 FLASH主存储器的擦除和烧写。本应用笔记将介绍如何进入 CW32 微控制器 ISP 模式,以及所使用的
    发表于 06-06 13:26

    CW32单片机UART本数据收发功能介绍

    CW32L083 内部集成 6 个通用异步收发器 (UART),支持异步全双工、同步半双工和单线半双工模式,支持硬件数据流控和多通信;可
    发表于 04-19 10:18

    CW32单片机在智能马桶的应用介绍

    和调节。本文将介绍CW32单片机在智能马桶的详细应用。 图:CW32的智能马桶控制板 CW32单片机
    发表于 12-20 10:06

    cw32和stm32的区别

    cw32和stm32的区别 CW32和STM32是两种常见的单片机,被广泛应用于各种电子设备中。在本文中,我们将深入探讨CW32和STM32之间的区别和优劣势。 1. 硬件性能 硬件性
    的头像 发表于 08-16 11:15 2254次阅读

    CW32单片机低电压检测器的使用介绍

    CW32单片机低电压检测器的使用介绍
    的头像 发表于 09-18 10:56 621次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>低电压检测器的使用<b class='flag-5'>介绍</b>

    CW32单片机UART波特率设置介绍

    CW32单片机UART波特率设置介绍
    的头像 发表于 10-24 17:35 494次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b><b class='flag-5'>UART</b>波特率设置<b class='flag-5'>介绍</b>

    CW32单片机I2C接口读写EEPROM芯片介绍

    CW32单片机I2C接口读写EEPROM芯片介绍
    的头像 发表于 11-09 17:42 593次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>I2C接口读写EEPROM芯片<b class='flag-5'>介绍</b>

    CW32 PWM输出功能介绍

    CW32 PWM输出功能介绍
    的头像 发表于 09-27 16:12 412次阅读
    <b class='flag-5'>CW32</b> PWM输出<b class='flag-5'>功能</b><b class='flag-5'>介绍</b>

    CW32实时时钟(RTC)介绍

    CW32实时时钟(RTC)介绍
    的头像 发表于 10-24 15:36 523次阅读
    <b class='flag-5'>CW32</b>实时时钟(RTC)<b class='flag-5'>介绍</b>

    基于CW32单片机做的软硬件开源项目

    今天就再给大家分享一个基于CW32单片机做的软硬件开源项目,其中包括RTOS、GUI、蓝牙、电源管理等众多常用功能
    的头像 发表于 10-19 10:17 572次阅读
    基于<b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>做的软硬件开源项目

    基于CW32的物联网应用

    CW32】基于CW32的物联网应用
    的头像 发表于 11-02 15:55 335次阅读
    基于<b class='flag-5'>CW32</b>的物联网应用

    CW32单片机在智能马桶的应用介绍

    智能科技的迅速发展使得我们的日常生活变得更加便捷和舒适。智能马桶作为其中一种智能家居产品,通过单片机接受和处理来自传感器的数据,然后通过控制模块对智能马桶的各项功能进行控制,实现对智能马桶的全面控制和调节。本文将
    的头像 发表于 12-20 10:02 362次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>在智能马桶的应用<b class='flag-5'>介绍</b>

    CW32单片机在智能马桶的应用介绍

    和调节。本文将介绍CW32单片机在智能马桶的详细应用。图:CW32的智能马桶控制板CW32单片机
    的头像 发表于 12-20 10:09 258次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>在智能马桶的应用<b class='flag-5'>介绍</b>