华大电子MCU CIU32M010、CIU32M030通用异步收发器

本文详细介绍了CIU32M010和CIU32M030集成的UART模块,包括数据模式、波特率配置、发送和接收流程、错误检测及时钟和复位控制。
  1. 通用异步收发器(UARTx)
    1.1. 模块介绍
    CIU32M010、CIU32M030 集成的通用异步收发器(UART)提供了一种灵活的方法与使用工业标准NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。
    1.2. 功能特点
    • 支持 8bit 数据和 9bit 数据模式
    • 支持 18bit 波特率寄存器灵活配置
    • 支持全双工异步通信、单工发送、单工接收、单线通信模式
    • 支持硬件奇偶校验可选
    • 具有 4 帧数据的接收缓存,1 帧数据的发送缓冲
    • 硬件检测接收超时,超时长度可以配置,配置范围:1~16384 比特率时间
    • 支持帧出错检测
    • 可选 STOP 位为 1 位或 2 位
    1.3. 功能说明
    1.3.1. 波特率生成功能
    波特率计算公式 = SYSCLK/(UART_BAUD+1) (UART_BAUD>=6)
    UART 模块的工作时钟为系统时钟,因此,应当根据当前系统时钟频率以及需要的波特率计算 UART_BAUD 的配置值。一旦系统时钟频率改变,应当相应修改波特率配置。
    1.3.2. UART 发送器
    发送器可发送 8/9bit 数据,由寄存器 UART_CON 中的 BIT9_EN 位的配置值决定。软件向寄存器
    UART_DATA 写入数据时,发送器将通过 IO 管脚 UART_TX 发送数据帧,UART_TX 的极性可以通过寄存
    器 UART_CON 中的 TX_INV 位来配置。
    发送数据流程:发射器输出管脚(UART_TX)闲置状态时,默认为高电平。模块使能后,软件向寄存
    器 UART_DATA 写入要发送的数据启动发送。发送器有一帧的发送缓冲,寄存器 UART_STA 中
    TX_BUF_EMPTY 为高电平时,软件可向寄存器 UART_DATA 再写入一帧数据,它将被存入发送缓冲区,
    TX_BUF_EMPTY 会变零,在当前帧发送完成时,会接着发送缓冲区中的数据。
    数据发送完成且缓冲区为空时,寄存器 UART_STA 中 TC_PEND 位置 1,此时如果寄存器 UART_CON
    中 TCIE 位使能,则产生中断。
    发送器发送序列:起始位->数据位(LSB)->停止位
    1.3.3. UART 接收器
    接收器可接收 8/9bit 数据,由寄存器 UART_CON 中的 BIT9_EN 位的配置值决定。
    数据字符由逻辑 0 的起始位、8/9bit 数据位,奇偶校验位和逻辑 1 的停止位组成。
    接收器有 4 个 8/9bit 的数据缓冲。在缓冲区接收到 4 个数据之后,且又有一帧数据接收完成时,寄存器 UART_STA 中 RX_BUF_OV 会置 1,新的数据将不会存储在数据缓冲区中,即新数据丢失。 在接收一个数据帧的过程中可使能奇偶错误检测、帧错误检测和超时检测,通过配置寄存器 UART_CON 打开相应的错误检测使能位和相应的错误中断使能位。
    帧错误检测机制是指在 stop 位检测到 IO 引脚 UART_RX 是低电平时,为帧错误。
    超时检测机制是指在接收到 1byte 之后,检测是否超过了设置的时间,如果没有则继续接收数据,超时时间可以通过寄存器 UART_CON 中 TO_BIT_LEN 进行配置。接收缓冲区有数据,即寄存器 UART_STA 中的 RX_BUF_NOT_EMPTY=1 时,软件可以通过读
    UART_DATA 寄存器的方式来获取收到的数据。
    1.4 时钟与复位
    1.4.1. 时钟介绍
    该模块时钟来源于系统时钟,可通过配置系统寄存中 CLKCON2 来使能时钟。
    1.4.2. 复位介绍
    该模块的复位源有两个,分别是系统复位和软件复位,软件复位可通过配置系统寄存器触发。
华大CIU32系列MCU例程的使用方法通常包括以下几个步骤: 1. **开发环境搭建**: - 安装适用于CIU32系列的集成开发环境(IDE),如Keil MDK或IAR Embedded Workbench。这些工具支持CIU32系列MCU,能够提供强大的调试功能和项目管理能力[^1]。 - 下载并安装华大官方提供的标准库或HAL库。这些库文件为开发者提供了丰富的API接口,简化了底层寄存器的操作,使得开发者可以更加专注于应用程序的开发[^1]。 2. **获取例程**: - 访问华大官方网站或官方论坛,查找CIU32系列的相关资源,下载官方提供的例程包。这些例程通常包含了各种外设的基本使用示例,如GPIO、UART、SPI等,非常适合初学者学习和理解如何配置和使用这些外设。 3. **例程配置与编译**: - 打开IDE,导入相应的例程项目。根据实际使用的MCU型号和硬件平台,可能需要调整一些配置选项,比如系统时钟设置、外设初始化参数等。 - 配置完成后,进行项目的编译。如果编译过程中遇到错误,应仔细检查配置是否正确以及所有必要的库文件是否已正确安装。 4. **烧录与调试**: - 使用编程器将编译好的程序烧录到CIU32 MCU中。常见的编程接口有SWD和JTAG,具体取决于目标板的设计。 - 利用IDE内置的调试工具对程序进行在线调试,解决可能出现的问题。通过设置断点、查看变量值等方式,确保程序按预期运行。 5. **扩展应用开发**: - 在成功运行基础例程的基础上,可以根据自己的项目需求对外设功能进行扩展,开发更复杂的应用程序。 - 对于希望快速验证创意想法的学生或创客来说,还可以考虑利用Arduino Core适配方案,这可以让基于CIU32的开发变得更加简单快捷。 ### 示例代码:点亮LED 假设有一个简单的LED控制例程,其核心代码可能如下所示(基于C语言): ```c #include "stm32f0xx_hal.h" // 假设使用的是类似STM32F0系列的HAL库 int main(void) { HAL_Init(); // 初始化HAL库 SystemClock_Config(); // 配置系统时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; // 假设LED连接到PA5 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIO while (1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 点亮LED HAL_Delay(1000); // 延时1秒 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 关闭LED HAL_Delay(1000); // 再次延时1秒 } } ``` 这段代码演示了如何使用HAL库来初始化一个GPIO引脚作为输出,并通过循环控制该引脚高低电平的变化,从而实现LED的闪烁效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值