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

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

3天内不再提示

STM8S_ 004_UART基本收发数据

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-20 10:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

写在前面 Ⅰ

做软件开发的人都知道打印信息的重要,说到打印信息,我们就不得不说UART串口打印。做单片机开发的人,打印信息主要的来源就是UART串口打印。因此,关于UART相关的知识就比较重要。

printf、scanf这种标准的函数不只是可以在电脑上可以使用,在我们单片机上也同样可以使用,本文只讲述关于UART的基础知识,关于printf、scanf这一块后面将再次给大家整理一篇文章。

本文将结合“STM8S参考手册”和软件源代码给大家讲述关于UART的基础知识和用法。

为方便大家阅读,本文内容已经整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

UART基础知识 Ⅱ

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。

STM8S微控制器家族的通用同步异步收发器(UART1、UART2或UART3)提供了一种灵活的方法和使用工业标准NZR异步串行数据格式的外部设备之间进行全双工数据交换。STM8的UART提供宽范围的波特率选择,并且支持多处理器通讯。

主要特性:

Ø全双工的,异步通信

Ø高精度波特率发生器系统:发送和接收共用的可编程波特率,最高达 2.5Mbits/s

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

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

Ø单线半双工通信(UART1)

Ø检测标志:接收缓冲器满、发送缓冲器空、传输结束标志

Ø6个带标志的中断源

Ø2个中断向量

Ø低功耗模式

UART同步模式

UART_CK脚是UART发送器时钟的输出。在起始位和停止位期间,UART_CK脚上没有时钟脉冲。根据UART_CR3寄存器中LBCL位的状态,发送器决定在最后一个有效数据位期间产生或不产生时钟脉冲。 UART_CR3寄存器的CPOL位允许用户选择时钟极性, UART_CR3寄存器上的CPHA位允许用户选择外部时钟的相位。

在总线空闲帧和断开帧中,外部CK时钟处于非激活状态。

注意:

1.UART_CK脚同UART_TX脚一起联合工作。当UART发送端被禁用时(TEN和REN=0),UART_CK和UART_TX管脚为高阻态。

2.在UART发送端和接收端都被禁用(TEN=REN=0)时, LBCL,CPOL和CPHA位必须被正确配置以保证时钟脉冲正确工作;当发送器或接收器被激活时,这些位不能被改变。

3.建议在同一条指令中设置TE和RE,以减少接收器的建立时间和保持时间。

4. UART只支持主模式:它不能使用来自其他设备的输入时钟以接收或发送数据(SCLK只能配置为输出状态)。

5. 本节给出的数据只有在寄存器UART_BRR2的UART_DIV[3:0]为0时才有效。否则建立时间和持续时间不再是1/16位时间,而是4/16位时间。

该功能选项可以串行地控制那些由移位寄存器组成的外设,而不会失去异步通讯的功能,即仍然可以与其他异步发送接收器通讯。

UART同步传输的例子:

软件工程源代码 Ⅲ

1、关于工程

本文提供的工程代码是基于前面软件工程“STM8S-A02_TIM精确延时(阻塞式)”增加UART串口修改而来。初学的朋友可以参看我前面对应的基础文章,那些文章讲的比较详细。

工程源代码主要实现功能:UART串口基本输出+中断接收数据。UART串口间隔1s打印字符串“Demo...”,串口通过中断接收数据,接收到一个字符就将其通过串口发送出去。

本文重点讲述关于UART的内容:

UART_Initializes:UART串口初始化

UART1_SendByte:UART串口发送字节数据

2.代码分析说明

A.UART_Initializes:初始化

void UART_Initializes(void)

{

UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);

UART1_Cmd(ENABLE);

UART1_ITConfig(UART1_IT_RXNE, ENABLE);

enableInterrupts();

}

UART1_Init:包含的参数:

115200:波特率

UART1_WORDLENGTH_8D:字长,8位或9位

UART1_STOPBITS_1:停止位

UART1_PARITY_NO:奇偶校验

UART1_SYNCMODE_CLOCK_DISABLE:同步模式

UART1_MODE_TXRX_ENABLE:收发使能

这里每一个参数都可以有不同值,可参看其枚举类型。

UART1_Cmd(ENABLE):使能UART1.

UART1_ITConfig(UART1_IT_RXNE, ENABLE):使能中断接收。

enableInterrupts():使能全局中断。

B.UART1_SendByte:发送字节数据

void UART1_SendByte(uint8_t Data)

{

while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));

UART1_SendData8(Data);

while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET));

}

while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)):等待发送为空

UART1_FLAG_TXE代表发送寄存器为空。

UART1_SendData8(Data):发送字节数据

while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET)):等待传输完成

UART1_FLAG_TC代表发送完成标志。

C.中断接收

位于stm8s_it.c文件下:

INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)

{

uint8_t temp;

temp = UART1_ReceiveData8();

UART1_SendData8(temp);

}

这里只是简单的一个Demo例程,接收到数据,将其通过串口发送出去。

UART串口有接收数据中断,会置位接收标志,平常我们响应中断,一般都会清楚中断标志,但串口中断接收数据,我们都会去读取串口接收数据,读取数据会自动清除标志位。见参考手册中“状态寄存器UART_SR”:

D.主函数功能

while(1)

{

LED_ON;

TIMDelay_Nms(500);

LED_OFF;

TIMDelay_Nms(500);

UART1_Printf((uint8_t*)"Demo...");

}

主函数里面实现间隔一段时间(1s),通过UART串口发送字符串“Demo...”。

下载 Ⅳ

STM8S资料:

http://pan.baidu.com/s/1o7Tb9Yq

软件源代码工程(STM8S-A04_UART基本收发数据):

http://pan.baidu.com/s/1c2EcRo0

提示:如果网盘链接失效,可以微信公众号“底部菜单”查看更新链接。

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

    关注

    49

    文章

    8901

    浏览量

    165953
  • uart
    +关注

    关注

    22

    文章

    1324

    浏览量

    107088
  • STM8S
    +关注

    关注

    16

    文章

    149

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电子工程师必备:PACDN004与SZPACDN004 ESD保护阵列深度解析

    电子工程师必备:PACDN004与SZPACDN004 ESD保护阵列深度解析 在电子设备的设计中,静电放电(ESD)保护是一个不可忽视的重要环节。ESD可能会对电子元件造成永久性损坏,影响设备
    的头像 发表于 05-15 16:35 163次阅读

    onsemi NTTFS004P02P8 P沟道MOSFET:高性能与可靠设计的典范

    onsemi NTTFS004P02P8 P沟道MOSFET:高性能与可靠设计的典范 在电子设计领域,MOSFET作为关键的功率开关器件,其性能直接影响到电路的效率和可靠性。今天,我们来深入探讨
    的头像 发表于 04-10 11:30 238次阅读

    SGM8T245:8位双电源总线收发器的详细解析

    SGM8T245:8位双电源总线收发器的详细解析 在电子设计领域,总线收发器是实现数据传输和电平转换的关键组件。SGM
    的头像 发表于 03-16 09:10 603次阅读

    深入解析SGM8T245S8位双电源总线收发器的卓越性能与应用

    深入解析SGM8T245S8位双电源总线收发器的卓越性能与应用 在电子设备的设计中,总线收发器扮演着至关重要的角色,它能够实现数据的双向传
    的头像 发表于 03-13 17:05 677次阅读

    高速数据传输利器:DS90LV004的深度剖析

    高速数据传输利器:DS90LV004的深度剖析 在高速数据传输领域,工程师们总是在寻找性能卓越、功能强大且易于集成的解决方案。今天,我们就来深入探讨德州仪器(TI)推出的DS90LV004
    的头像 发表于 01-30 17:30 852次阅读

    瑞萨RA系列FSP库开发实战指南之DMAC+UART串口收发实验

    拷贝一份我们之前的e2s工程“19_UART_Receive_Send”,然后将工程文件夹重命名为“20_DMAC_Using_UART”,最后再将它导入到我们的e2studio工作空间中。
    的头像 发表于 12-26 09:28 4594次阅读
    瑞萨RA系列FSP库开发实战指南之DMAC+<b class='flag-5'>UART</b>串口<b class='flag-5'>收发</b>实验

    请问CW32 UART用于数据收发的具体过程是怎样的?

    CW32 UART用于数据收发的具体过程是怎样的?
    发表于 12-24 07:42

    中微爱芯电低功耗8位微控制器AiP8M2116S介绍

    AiP8M2116S/AiP8M2115S是低功耗8051内核MCU,内置16KB MTP ROM、256B XRAM、256B IRAM,内部集成Timer0/1/2、REM、UART、LCD
    的头像 发表于 12-18 10:04 1121次阅读
    中微爱芯电低功耗<b class='flag-5'>8</b>位微控制器AiP<b class='flag-5'>8M2116S</b>介绍

    CW32单片机UART低功耗模式的介绍

    深度休眠模式时,CPU 运行状态与退出休眠模式相同。 4.UART控制深度休眠模式 UART控制器工作在双时钟域下,支持在深度休眠模式下进行正常的数据收发,并通过接收完成中断唤醒
    发表于 11-19 06:08

    多路UART数据转发芯片 支持1主4从UART接口 UART扩展芯片

    多路UART数据转发芯片 支持1主4从UART接口 UART扩展芯片 EU104 是一款高性能 UART
    的头像 发表于 11-12 10:33 602次阅读

    CW32 UART低功耗模式详解

    状态与退出休眠模式相同。 4.UART控制深度休眠模式 UART控制器工作在双时钟域下,支持在深度休眠模式下进行正常的数据收发,并通过接收完成中断唤醒 MCU回到运行模式。 如果设置
    发表于 11-12 07:24

    UART接口数据线接收和发送数据

    _TXDATA寄存器其实是UART发送FIFO(TX-FIFO)的映像,TX-FIFO的深度为8个表项,每个表项存储1字节的数据。FIFO按照先入先出的方式组织,软件可以通过写UART
    发表于 10-29 07:37

    请问rt_thread的uart下如何支持9位数据的发送和接收?

    目前项目中有使用UART进行数据的发送和接收,但是此部分UART比较特殊,其使用9bit进行数据传输,其中第9位用于指示当前是地位还是数据
    发表于 09-28 07:56

    使用设备驱动uart数据丢帧怎么解决?

    ); uart_rec_buff[count++] = (uint8_t)(usart_data_receive(uart-&gt;uart_periph)&amp;
    发表于 09-26 07:20

    STM32H743 UART DMA接收不到数据是为什么?

    BSP_UART3_RX_BUFSIZE 256 #define BSP_UART3_TX_BUFSIZE 128 #define BSP_USING_UART8 #define BSP_U
    发表于 09-11 07:14