完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
通用异步收发器(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)。双时钟域的设计更便于波特率的设置,支持从深度休眠模式下唤醒控制器。 2.UART中断 UART 控制器支持 6 个中断源,当 UART 中断触发事件发生时,中断标志位会被硬件置位,如果设置了对应的中断使能控制位,将产生中断请求。CW32L083 的一个 UART 模块使用一个系统 UART 中断,UART 中断是否产生中断跳转由嵌套向量中断控 制器 (NVIC) 的中断使能设置寄存器 NVIC_ISER 的相应位控制。系统 UART 中断示意图如下图所示: 在用户 UART 中断服务程序中,应查询相关 UART 中断标志位,以进行相应的处理,在退出中断服务程序之前, 要清除该中断标志位,避免重复进入中断程序。各 UART 中断源的标志位、中断使能位、中断标志清除位或清除方法,如下表所示: 3.CH340介绍 CH340是一个USB总线的转接芯片,实现USB协议和UART协议的自动转换。 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系统时钟 void RCC_Configuration(void) {
} 2.GPIO配置 void GPIO_Configuration(void) {
} 3.UART配置 void UART_Configuration(void) {
} 4.配置NVIC void NVIC_Configuration(void) {
} 5.中断函数处理UART2/UART5 void UART2_UART5_IRQHandler(void) {
} 6.定义常量define //UARTx #define DEBUG_UARTx CW_UART5 #define DEBUG_UART_CLK RCC_APB1_PERIPH_UART5 #define DEBUG_UART_APBClkENx RCC_APBPeriphClk_Enable1 #define DEBUG_UART_BaudRate 9600 #define DEBUG_UART_UclkFreq 8000000 //UARTx GPIO #define DEBUG_UART_GPIO_CLK RCC_AHB_PERIPH_GPIOB #define DEBUG_UART_TX_GPIO_PORT CW_GPIOB #define DEBUG_UART_TX_GPIO_PIN GPIO_PIN_8 #define DEBUG_UART_RX_GPIO_PORT CW_GPIOB #define DEBUG_UART_RX_GPIO_PIN GPIO_PIN_9 //GPIO AF #define DEBUG_UART_AFTX PB08_AFx_UART5TXD() #define DEBUG_UART_AFRX PB09_AFx_UART5RXD() //中断 #define DEBUG_UART_IRQ UART2_UART5_IRQn 7.UART中断方式接收数据 int32_t main(void) {
} 8、测试结果如下:当MCU收到上位机发送的数据后,再回传到上位机,UART功能正常。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
CW32L010安全低功耗MCU,树立M0+产品行业新标杆!
785 浏览 0 评论
894 浏览 0 评论
1331 浏览 0 评论
1227 浏览 0 评论
962 浏览 0 评论
2469浏览 1评论
1005浏览 1评论
【CW32饭盒派开发板试用体验】与CW32饭盒派的第一次亲密接触
383浏览 1评论
263浏览 0评论
399浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 06:28 , Processed in 0.817696 second(s), Total 69, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号