打印
[开发板]

CW32L0开发板学习记录三:板载串口2学习过程

[复制链接]
164|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
聪聪哥哥|  楼主 | 2024-12-7 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天和大家分享一下CW32L010的串口输出功能:
CW32L010 内部集成2个通用异步收发器(UART),支持异步全双工、同步半双工和单线半双工模式,支持硬件数据流控和多机通信,还支持 LIN(局域互连网络);可编程数据帧结构,可以通过小数波特率发生器提供宽范围的波特率选择:内置定时器模块,支持等待超时检测、接收空闲检测、自动波特率检测和通用定时功能。
UART 控制器工作在双时钟域下,允许在深度休眠模式下进行数据的接收,接收完成中断可以唤醒 MCU 回到运行模式。
注意:
仅 UART1 支持 LIN 和定时器功能:UART2 可通过片内外设互联与 BTIM/GTIM/ATIM 的从模式协同工作实现超时定时器相关功能。

CW32串口的主要特征:
主要特性
支持双时钟域驱动
-配置时钟 PCLK
- 传输时钟 UCLK
可编程数据帧结构:
-数据字长:8、9位,LSB/MSB 在前
- 校验位:无校验、奇校验、偶校验
-停止位长度:1、1.5、2 位
16 位整数、4 位小数波特率发生器
支持异步全双工、同步半双工、单线半双工
单独的发送器和接收器使能位
单独的发送和接收信号极性控制
TXD/RXD 引脚配置可交换
支持 LoopBack 模式
支持接收数据匹配检测
间隔段帧和空闲字符发送和接收功能
硬件流控 RTS、CTS 和 RS485 驱动器使能
发送缓冲器空/接收数据完成触发启动 ADC
支持多机通信,自动地址识别
13 个带中断标志的中断源
自动波特率检测模式 1/2
等待超时检测/接收空闲检测
内置定时器模块支持通用定时器功能
错误检测:奇偶校验错误、帧结构错误、溢出错误、噪声错误
低功耗模式下收发数据,中断唤醒 MCU
支持与工作电压低于 MCU 的器件通信(借助 VC)
LIN 主模式同步间隔段发送功能和 LIN 从模式同步间隔段检测功能:
-支持长度可配置的同步间隔段发送
- 支持 10/11 位同步间隔段的检测

三:查询方式发送数据
步骤 1:设置 SYSCTRL_AHBEN.GPIOx为1,SYSCTRL_APBENx.UARTx为1,使能 UART 引脚对应的 GPIO 时钟和 UART 配置时钟;
步骤 2:将 UARTx _TXD 引|脚配置成推挽复用输出模式,具体寄存器配置步骤请参见8通用输入输出端口(GPIO)章节;
步骤 3:设置 UARTX_CR1.SYNC为0,配置 UARTx为异步全双工通信模式;步骤 4:配置数据帧;
1.起始位判定方式:配置 UARTX CR1.START
2.数据字长:配置 UARTX CR1.CHLEN
3.校验位:配置 UARTX_CR1.PARITYEN 和 UARTX_CR1.PARITY
4.停止位:配置 UARTX CR1.STOP步骤 5:配置 UARTX_CR1.SOURCE,选择传输时钟源;步骤 6:配置 UARTX_CR1.OVER,选择采样模式;
步骤 7:配置 UARTx_BRRI 和 UARTx_BRRF 寄存器,配置波特率,具体配置请参见 16.3.3.2小数波特率发生器;
步骤 8:设置 UARTX CR1.TXEN 为1使能发送;
步骤 9:设置 UARTX ICRTC为0,清除发送完成标志位;
步骤 10:将要发送的一帧数据写入 UARTX_TDR 寄存器;
步骤 11:查询等待 UARTX ISR.TC 标志位置 1,确认一帧数据发送完成;
步骤 12:重复步骤 9 至步骤 12,发送下一帧数据。

四:开发板硬件设计:

五:软件设计
GPIO口初始化代码:
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
   
    GPIO_WritePin(DEBUG_UART_TX_GPIO_PORT, DEBUG_UART_TX_GPIO_PIN,GPIO_Pin_SET);    // 设置TXD的默认电平为高,空闲

    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);

     //UART TX RX 复用
    DEBUG_UART_AFTX;
    DEBUG_UART_AFRX;
}

串口初始化:
void UART_Configuration(void)
{
    UART_InitTypeDef UART_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);
}
复用串口功能
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] Retargets the C library printf function to the UART.
*
*/
PUTCHAR_PROTOTYPE
{
    UART_SendData_8bit(DEBUG_UARTx, (uint8_t)ch);

    while (UART_GetFlagStatus(DEBUG_UARTx, UART_FLAG_TXE) == RESET);

    return ch;
}
主程序代码:
    while(1)
    {
    printf("\r\nCW32L010 UART 21 IC CE PING HUO DONG \r\n");
                Delay(0X7FFF);
    }
测试图片:

使用特权

评论回复
沙发
AdaMaYun| | 2024-12-10 08:27 | 只看该作者
UART 控制器工作在双时钟域下,允许在深度休眠模式下进行数据的接收,接收完成中断可以唤醒 MCU 回到运行模式。

使用特权

评论回复
板凳
LOVEEVER| | 2024-12-12 09:13 | 只看该作者
UART1 支持 LIN 和定时器功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

101

帖子

0

粉丝