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

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

3天内不再提示

CKS32F107xx系列USART的特性和功能

中科芯MCU 来源:中科芯MCU 2025-02-18 16:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

USART介绍

通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。

USART主要特性

全双工的,异步通信

NRZ标准格式

分数波特率发生器系统

—发送和接收共用的可编程波特率,最高达4.5Mbits/s

可编程数据字长度(8位或9位)

可配置的停止位-支持1或2个停止位

LIN主发送同步断开符的能力以及LIN从检测断开符的能力

—当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符

发送方为同步传输提供时钟

IRDA SIR编码器解码器

—在正常模式下支持3/16位的持续时间

模拟智能卡功能

—智能卡接口支持ISO7816-3标准里定义的异步智能卡协议

—智能卡用到的0.5和1.5个停止位

单线半双工通信

可配置的使用DMA的多缓冲器通信

—在SRAM里利用集中式DMA缓冲接收/发送字节

单独的发送器和接收器使能位

检测标志

—接收缓冲器满

—发送缓冲器空

—传输结束标志

校验控制

—发送校验位

—对接收数据进行校验

四个错误检测标

—溢出错误

—噪音错误

—帧错误

—校验错误

10个带标志的中断源

—CTS改变

—LIN断开符检测

—发送数据寄存器

—发送完成

—接收数据寄存器满

—检测到总线为空闲

—溢出错误

—帧错误

—噪音错误

—校验错误

多处理器通信--如果地址不匹配,则进入静默模式

从静默模式中唤醒(通过空闲总线检测或地址标志检测)

两种唤醒接收器的方式:地址位(MSB,第9位),总线空闲

USART功能概述

任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。

TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。

1、字符发送

在USART发送期间,在TX引脚上首先移出数据的最低有效位。在此模式里,USART_DR寄存器包含了一个内部总线和发送移位寄存器之间的缓冲器。

每个字符之前都有一个低电平的起始位;之后跟着的停止位,其数目可配置。USART支持多种停止位的配置:0.5、1、1.5和2个停止位。

配置步骤:

通过在USART_CR1寄存器上置位UE位来激活USART

编程USART_CR1的M位来定义字长。

在USART_CR2中编程停止位的位数。

如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器通信中的描述配置DMA寄存器。

利用USART_BRR寄存器选择要求的波特率。

设置USART_CR1中的TE位,发送一个空闲帧作为第一次数据发送。

把要发送的数据写进USART_DR寄存器(此动作清除TXE位)。在只有一个缓冲器的情况下,对每个待发送的数据重复步骤7。

在USART_DR寄存器中写入最后一个数据字后,要等待TC=1,它表示最后一个数据帧的传输结束。当需要关闭USART或需要进入停机模式之前,需要确认传输结束,避免破坏最后一次传输。

2、字符接收

在USART接收期间,数据的最低有效位首先从RX脚移进。在此模式里,USART_DR寄存器包含的缓冲器位于内部总线和接收移位寄存器之间。

配置步骤:

将USART_CR1寄存器的UE置1来激活USART。

编程USART_CR1的M位定义字长

在USART_CR2中编写停止位的个数

如果需多缓冲器通信,选择USART_CR3中的DMA使能位(DMAR)。按多缓冲器通信所要求的配置DMA寄存器。

利用波特率寄存器USART_BRR选择希望的波特率。

设置USART_CR1的RE位。激活接收器,使它开始寻找起始位。

当一字符被接收到时

RXNE位被置位。它表明移位寄存器的内容被转移到RDR。换句话说,数据已经被接收并且可以被读出(包括与之有关的错误标志);

如果RXNEIE位被设置,产生中断;

在接收期间如果检测到帧错误,噪音或溢出错误,错误标志将被置起;

在多缓冲器通信时,RXNE在每个字节接收后被置起,并由DMA对数据寄存器的读操作而清零;

在单缓冲器模式里,由软件读USART_DR寄存器完成对RXNE位清除。RXNE标志也可以通过对它写0来清除。RXNE位必须在下一字符接收结束前被清零,以避免溢出错误。

USART程序编写

开启GPIO、USART1时钟;

对USART引脚进行配置,PA9映射TX,PA10映射RX;

对USART参数进行配置、开启USART的RXNE中断;

对中断参数进行配置;

/*******************************************************************************

* Function Name : USART_Configuration

* Description : Configure USART1

* Input : None

* Output : None

* Return : None

* Attention : None

*******************************************************************************/

void CKS_USART_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);

/*USART1_TX -> PA9 , USART1_RX -> PA10*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* USART configuration ------------------------------------------------------*/

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_Rx | USART_Mode_Tx;

USART_Init(USART1, &USART_InitStructure);

/* Enable USART RXNE interrupt */

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_Cmd(USART1, ENABLE);

/* NVIC configuration ------------------------------------------------------*/

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

5. 编写USART1_IRQHandler函数;

我们利用USART的IDLE状态位进行不定长度数据接收,当USART被RXNE中断触发后,程序将在该中断函数中轮询,直至串口空闲后IDLE状态位被置位。

/*******************************************************************************

* Function Name : USART1_IRQHandler

* Description : This function handles USART1 global interrupt request.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void USART1_IRQHandler(void)

{

uint8_t i = 0;

uint8_t j = 0;

if(USART_GetFlagStatus(USART1, USART_IT_RXNE) != RESET)

{

/* get usart data until IDLE flag is set */

while(!USART_GetFlagStatus(USART1, USART_FLAG_IDLE))

{

if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)

{

CKS_Uart_Buff[i++] = USART_ReceiveData(USART1);

}

}

/* clear uart IDLE flag */

j = USART1->SR;

j = USART1->DR;

/* clear uart RXNE flag */

USART_ClearFlag(USART1, USART_IT_RXNE);

}

}

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

    关注

    10

    文章

    3795

    浏览量

    110619
  • 异步通信
    +关注

    关注

    1

    文章

    59

    浏览量

    10511
  • USART
    +关注

    关注

    1

    文章

    201

    浏览量

    32939
  • 发送器
    +关注

    关注

    1

    文章

    261

    浏览量

    27643

原文标题:MCU微课堂|CKS32F107xx USART(一)

文章出处:【微信号:中科芯MCU,微信公众号:中科芯MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    中科芯CKS32F107XX系列MCU的独立看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口型看门狗WWDG(Window Watchdog),它们在
    的头像 发表于 11-28 14:51 3590次阅读
    中科芯<b class='flag-5'>CKS32F107XX</b><b class='flag-5'>系列</b>MCU的独立看门狗介绍

    中科芯CKS32F107XX系列MCU的窗口看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口型看门狗WWDG(Window Watchdog),本文主要介绍WWDG的应用,关于IWDG的详情,请参看我们的IWDG微课堂内容。
    的头像 发表于 11-28 14:48 3757次阅读
    中科芯<b class='flag-5'>CKS32F107XX</b><b class='flag-5'>系列</b>MCU的窗口看门狗介绍

    基于CKS32F4xx系列的MCU互补PWM方案

    互补输出实际跟比较输出章节一样使用的是定时器的功能,所以相关的函数设置同样在库函数文件CKS32f4xx_tim.h和CKS32f4xx_tim.c文件中。 1)开启TIM1和GPIO时钟,配置PA7、PA8选择复用
    发表于 12-02 10:13 1426次阅读
    基于<b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>的MCU互补PWM方案

    CKS32F4xx系列DSP功能介绍

    CKS32F4xx系列使用高性能的32位内核,支持浮点运算单元(FPU),同时还支持DSP指令以及存储保护(MPU)用来加强应用的安全性。
    的头像 发表于 03-04 13:43 2697次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DSP<b class='flag-5'>功能</b>介绍

    利用CKS32F107xx系列RTC的闹钟实验

    本小节讲解的是如何在万年历实验的基础上,利用RTC的闹钟功能实现一个闹钟,在每天的[XX小时-XX分钟-XX秒]产生闹钟,然后通过闪烁LED模拟闹钟响效果。
    的头像 发表于 02-18 17:21 1145次阅读

    CKS32F4xx系列产品串口DMA传输

    在上一讲,我们讲过CKS32F4xx系列的6个串口都支持DMA传输。因此本节我们对CKS32F4xx系列的DMA进行介绍,同时利用DMA对串口数据进行传输。
    的头像 发表于 04-10 11:18 1831次阅读

    CKS32F4xx系列RNG功能设置

      MCU 微课堂 CKS32F4xx 系 列RNG功能 随机数发生器简介     CKS32F4xx系列自带了硬件随机数发生器(RNG),RNG处理器是一个以连续模拟噪声为基础的随机
    的头像 发表于 09-08 10:01 1620次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG<b class='flag-5'>功能</b>设置

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的头像 发表于 11-06 16:56 1506次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC<b class='flag-5'>功能</b>

    CKS32F4xx系列ADC多通道DMA电压采集

    CKS32F4xx系列ADC多通道DMA电压采集
    的头像 发表于 11-06 16:53 1682次阅读

    CKS32F4xx系列FSMC功能简介

    本课讲为大家讲解CKS32F4xx系列产品的FSMC应用实例,FSMC全称是Flexible Static Memory Controller,读作灵活的静态存储控制器,顾名思义,MCU可以通过FSMC扩展静态内存
    的头像 发表于 04-14 15:06 2088次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>FSMC<b class='flag-5'>功能</b>简介

    CKS32F107xx系列时钟系统具体配置方法讲解

    上一章节对CKS32F107xx系列时钟做了整体介绍,本章节以使用HSI内部高速时钟为例对时钟具体配置方法进行讲解。
    的头像 发表于 05-28 10:05 1399次阅读
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>时钟系统具体配置方法讲解

    CKS32F107xx系列MCU中ADC介绍

    CKS32F107xx系列产品提供2个12位的模拟/数字转换器(ADC),每个ADC共用多达16个外部通道,各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
    的头像 发表于 06-22 11:04 1587次阅读

    CKS32F107xx系列MCU的GPIO内部硬件结构和工作模式

    16个引脚,如型号为CKS2F107VET6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOE共5组GPIO,芯片一共100个引脚,其中GPIO就占了一大部分,所有的GPIO引脚都有基本的输入输出功能
    的头像 发表于 07-22 09:23 1668次阅读
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>MCU的GPIO内部硬件结构和工作模式

    详解CKS32F107xx系列的定时器同步功能

    CKS32F107xx系列部分定时器在内部是相连的,可用于定时器同步或链接,方便用户配置不同的同步模式,以便在电机控制、数据采集和PWM信号生成等应用中,实现复杂的时间序列和多通道的同步操作。本节课
    的头像 发表于 11-26 17:51 1482次阅读
    详解<b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>的定时器同步<b class='flag-5'>功能</b>

    CKS32F107xx系列USART的LIN模式

    CKS32F107xx系列在支持正常USART功能的同时,亦支持LIN(局域互联网)模式。
    的头像 发表于 02-18 17:18 886次阅读
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b><b class='flag-5'>USART</b>的LIN模式