STM8S_ 004_UART基本收发数据

发布者:颐真阁最新更新时间:2020-07-12 来源: 51hei关键字:STM8S  UART  基本收发数据 手机看文章 扫描二维码
随时随地手机看文章

写在前面 Ⅰ


做软件开发的人都知道打印信息的重要,说到打印信息,我们就不得不说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

关键字:STM8S  UART  基本收发数据 引用地址:STM8S_ 004_UART基本收发数据

上一篇:STM8S_003_ TIM定时中断
下一篇:STM8S_005_ ADC采集单通道电压

推荐阅读最新更新时间:2024-11-13 07:55

基于STM32H7 UART空闲事件及DMA传输示例
有人使用STM32H7芯片的UART,想利用DMA实现不定长的数据接收,实现过程似乎不太顺利。另外,刚好最近有人使用H7芯片做UART收发,当开启D-Cache未做MPU配置,使用指令对D-Cache做相应失效处理,发现通信结果异常。我这里简单演示下实现过程,分使用和不使用D-Cache两种做法,以供参考。 这里使用UART4做发送,UART5做接收,都使用DMA,均工作在Normal模式。 在主循环里每隔一定时间让UART4发送一串数据出去,一共3串依次发送。每次发送的数据长度不一样,但不会超过20个字符。 让UART5基于DMA做不定长的数据接收,将接收长度定义在20。同时开启UART5的空闲中断。在UART5的
[单片机]
基于STM32H7 <font color='red'>UART</font>空闲事件及DMA传输示例
解析工程师所熟知的CAN、UART、IIC、USB等协议解码
随着硬件架构的不断更新,示波器早已不是只能“示波”的仪器了,协议解码就是典型代表!IIC、SPI、UART、CAN、LIN…我们为ZDS系列示波器最多免费配备了37种协议解码分析插件,这么多协议分别用在哪些地方,具体又如何使用呢? 示波器从模拟示波器发展到数字示波器,带来了许多大的改变,例如信号采集、带宽、采样率、屏显等。同样,这样的改变也体现在“协议解码”上,新的解码方式将人们从“0”,“1”的世界中解放出来,大大提高了工作效率。 最初的示波器只是一个简单的波形显示兼数据测量,而我们需要获取协议波形深层次的含义,从而去了解通信的数据正常传输。例如:观察IIC协议,我们需要按照时钟与数据信号一位一位对应,去进行0/1的组合
[测试测量]
STM8 多处理器通信
STM8 多处理器通信 通过UART可以实现多处理器通信(将几个UART连在一个网络里)。例如某个UART设备可以是主设备,它的TX输出和其他UART从设备的RX输入相连接;UART从设备的各自TX输出作逻辑与运算后和主设备的RX输入相连接。 在多处理器配置中,我们通常希望只有被寻址的接收者才被激活,来接收随后的数据,这样就可以减少由未被寻址的接收器的参与带来的多余的UART服务开销。 未被寻址的设备可启用其静默功能置于静默模式。在STM8静默模式里: 任何接收状态位都不会被设置。 所有接收中断被禁止。 UART_CR1寄存器中的RWU位被置1。RWU可以被硬件自动控制或在某个特定条件下由软件写入。 根据UAR
[单片机]
STM8 多处理器通信
S3C2440裸机实验(2)-----uart
调试程序时,我们可以使用查看变量的方法,但是还是不能离开调试信息的打印。。。。。在开始其他实验时,首先把uart功能实验,方便调试。 1.UART 支持中断模式和DMA模式 2.如果是使用系统时钟,UART最高能支持115.2k/s的数据传输,如果是使用外部的时钟,速度将更高,每道uart有FIFO模式和非FIFO模式,在FIFO模式中有两个64字节的FIFO分别用于接收和发送数据,在非FIFO模式中只有1字节的缓存区 3.下面是uart的结果图 4..从上面的结构图可以看出,UART由:波特率发生器,发送缓存和接收缓存,控制单元四个部分组成,波特率发生器可以是系统时钟(PCLK,FCLK/N)或者外部时钟(UEX
[单片机]
STM8 UART中断发,中断收
STM8 UART 初始化 配置STM8 UART的几个常用寄存器分别为: UART1_CR1:控制寄存器1 UART1_CR3:控制寄存器3 UART1_BRR2:波特率寄存器2 UART1_BRR1:波特率寄存器1 利用控制寄存器1,2,3可以配置UART数据传输的具体帧格式,这里将UART配置为1个起始位,8个数据位,1个停止位,无校验位。具体操作代码如下: UART1_CR1=0x00; UART1_CR3=0x00; 在UART1_CR1中第4位,定义了数据字的长度,该位写0将设置UART为一个起始位,8个数据位,n个停止位,停止位n的数量可在UART1_CR3中设置。 UART1_CR
[单片机]
利用中断改进UART功能
增加代码如下: /******************************************************* * 名称:UART0_Int * 功能:中断服务程序,根据接收的字符点亮相应的LED * 入口参数:无 * 出口参数:无 *********************************************************/ void __irq UART0_Int(void) { char temp; rSUBSRCPND|=(1 0); rSRCPND|=(1 28); rINTPND|=(1 28); //清除中断标志
[单片机]
stm8s的内部时钟切换
要用到stm8s105k6的内部128K低速时钟,调试不是蛮顺利,特此记录下。 从内部16M时钟切换至内部128K时钟,配置如下: void Clk_Config(void) { CLK_CKDIVR= 0x00; //系统时钟 1 分频 while(!(CLK_ICKR & 0x02)); //等待 HSI 准备好 CLK_SWCR|=0x02; //开启切换 CLK_ICKR|=0x08; //开启LSI while(!(CLK_ICKR&0x10)); //LSI准备就绪 CLK_SWR=0xd2; //LSR为主时钟源
[单片机]
STM8S 模拟I2C程序
STM8S的硬件I2C还是存在问题,不敢贸然使用. #define SCL PE_ODR_ODR1 #define SDA PE_ODR_ODR2 #define SDAM PE_IDR_IDR2 #define SET_SCL_OUT() {PE_DDR_DDR1=1; PE_CR1_C11 = 1; PE_CR2_C21 = 0;} #define SET_SDA_OUT() {PE_DDR_DDR2=1; PE_CR1_C12 = 1; PE_CR2_C22 = 0;} #define SET_SDA_IN() {PE_DDR_DDR2=0; PE_CR1_C12 = 0; PE_CR2_C22 = 0;} //------
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved