1. 综述

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

  做软件开发的人都知道打印信息的重要,说到打印信息,我们就不得不说UART串口打印。做单片机开发的人,打印信息主要的来源就是UART串口打印。因此,UART会比较常用到,所以在此对UART串口进行一个说明。

2. 关于STM8S103手册的UART简介

3. UART初始化参数详细讲解

3.1 BaudRate(波特率)

  所谓的波特率就是每秒钟传送的码元符号的个数,可以理解为串口的输出速率。可选的波特率有很多,常用的波特率有115200bps,9600bps等...

3.2 WordLength(数据长度)

  即为传输的数据转成二进制后有多少位。可选的数据位数:8位、9位,常用的数据位数为8位。

3.3 StopBits(停止位)

  即为数据帧的尾部传输停止位个数。可选的停止位:0.5位、1位、1.5位、2位,常用的停止位为1位。

3.4 Parity(奇偶校验)

  即为输出结果是否经过奇偶校验,根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。可选的奇偶校验:奇校验、偶校验、不进行奇偶校验。常用的为不进行奇偶校验。

3.5 SyncMode(同步模式 )(本博客对此模式只进行一个粗略讲解,如想深入了解,请察看官方的手册。)

    通信时双方是否有共同的时钟参考,能否通过时钟参考准确收发数据。可选择的模式有很多,常用的模式为 同步模式禁用,SLK PIN禁用。

3.6 Mode(UART模式)

  可选的模式:接收使能、接收不使能、发送使能、发送不使能、发送接收都使能。常用的模式为发送接收都使能。

  

4. 例程

4.1 编译环境

  我的编译环境是IAR,这款软件是现在STM8的主流平台,比较推荐。不过我打算等到STCubeMX更新出比较方便的版本后再去使用Keil5,因为我在用STM32的时候就是利用Keil5,的确很方便,你们也可以学着用一下。

4.2 主芯片

  我的主芯片是STM8S系列中的103,其中STM8S的003、005、和103、105,配置一样(外设和CPU频率,FLASH),在代码相同的情况下均可进行烧写。

4.3 库文件的添加

我们的工程可以在IAR中的官方例程中复制,操作过程:打开STM8S_StdPeriph_Lib(这是一个官方的库文件,下载IAR STM8包的时候就携带,里面有库文件和相对应的例程),将Libraries文件复制到你工程所在的文件下,并将有关于ADC的库文件添加到你的工程列表当中。添加完成后,就可以开始编写代码了(如果你将全部的库文件都添加进来的话,编译程序后库文件还有红点报错的话,这是因为你选的芯片上没有该功能,你需要将其删掉才能不报错。)如图。

4.4 代码

4.4.1 UART初始化

  我们所要用到的IO口和Uart都需要初始化,而IO的初始化就比较简单,具体步骤可以参考我上一篇博客,UART的初始化就需要到stm8s_uart1.c库文件中找到相对应的函数进行调用才能初始化成功。该库文件中的大部分函数都有一定意义和价值,大家可以根据需求进行调用,我这里就不进行一一细述了。

  下面是串口初始化的函数。

 /*******************************************************************************
* Function Name : MX_UART1_Init
* Description : UART1_Init
* Input : None
* Output : None
* Return : None
********************************************************************************/
void MX_UART1_Init(void)
{
//初始化UART中的所有寄存器
UART1_DeInit(); //发送接收引角口初始化
GPIO_Init(Uart_TX_GPIO_Port, Uart_TX, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(Uart_RX_GPIO_Port, Uart_RX, GPIO_MODE_IN_PU_IT); //UART的参数初始化
UART1_Init(, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); //UART中断使能
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); //使能UART
UART1_Cmd(ENABLE); //中断使能
enableInterrupts(); }

扩展一下基本知识就是:起始位 +数据(8位) +停止位(这里没有校验位)。
所以我们传输一个字节数据要用到10个位。这样算下来 115200/10 = 11520 字节/s。(即速度为11520 B/s)

通俗一点的说的话,KB是1024个B,11520 (B/S) / 1024 = 11.25KB/S就是我们这个功能所拥有的速度了。

这个是为了让你知道它的速度局限在哪里。因此来做一些它所力所能及的事情。

4.4.2 发送

  我们使用的是unsigned char类型的数据,所以要在stm8s_uart1.c文件里找到UART1_SendData8(uint8_t Data)函数然后放在main函数里调用就行,然后发送字符串的话,我们需要用到此函数。此函数在库函数中没有,所以需要我们手动添加进去,不过也相当于该库文件的一个功能,我们可以直接将此函数放进库文件里面,位置就放在发送函数UART1_SendData8(uint8_t Data)的下面即可。

 /**
* @brief Transmits 8 bit *data through the UART peripheral.
* @param Data: the data to transmit.
* @retval None
*/
void UART1_SendWord(uint8_t *Data)
{
while(*Data)
{
UART1_SendData8(*Data++);
while(!UART1_GetFlagStatus(UART1_FLAG_TXE));
} }

这里直接调用这两个函数便可实现发送。不过,发送的数据0x31是十六进制数,转成10十进制后为49,即为1的ASCII值。

     UART1_SendData8(0x31);
UART1_SendWord("国维不行");

实验结果:

4.4.2 中断接收

    if(UART1_GetITStatus(UART1_IT_RXNE) != RESET)        //检查指定的UART1中断是否发生。
{
UART1_SendData8(UART1_ReceiveData8()); //将接收的数据再用串口发送出去
UART1_ClearITPendingBit(UART1_IT_RXNE); //清除UART1挂起标志
}

由于IAR中库函数工程模板的中断都写在 stm8s_it.c 库文件中,我们需要打开将上面的代码加入函数内部中,如图。

如果不懂的如何操作中断函数,请看这里:我们只需要在中断的库函数里面添加代码即可,不用在主函数中对该中断函数进行调用,只要我们使能中断,系统会自动帮我们运行该函数的。

注意:这里的中断处理有芯片型号的区分,如果不是STM8S103芯片请自行选择相对应的芯片的中断处理函数。

实验结果:

5. 结尾

  相对来说,STM8库文件的UART调用还是比较容易的,希望该博客能够帮助到大家实现UART功能。

  对STM8的UART的说明和引用到这里结束,感谢各位看官的点击。

  如果觉得有所收获请点下推荐,若认为该博客中存在错误的说明或者对博客中某方面有疑问请留言。

作 者:浩宇99✌
出 处:https://www.cnblogs.com/zhenghaoyu/p/10698471.html
版权声明:本文原创发表于 博客园,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

  

基于STM8的UART发送和中断接收---STM8-第二章的更多相关文章

  1. STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

    Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信. ...

  2. MM32F0020 UART1中断接收和UART1中断发送

    目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1和NVIC中断 3.编写MM32F0020 UART1使能中断发送函数 4.编写MM32F0020 UART1中断接收和中断 ...

  3. MM32F0140 UART1中断接收和UART1中断发送

    目录: 1.MM32F0140简介 2.初始化MM32F0140 UART1和NVIC中断 3.编写MM32F0140 UART1使能中断发送函数 4.编写MM32F0140 UART1中断接收和中断 ...

  4. MM32F0020 UART1中断接收

    目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1和NVIC中断 3.编写MM32F0020 UART1中断接收函数 4.编写MM32F0020 UART1发送字节和ASCI ...

  5. MM32F0140 UART1 DMA RX and TX 中断接收和发送数据

    目录: 1.MM32F0140简介 2.DMA工作原理简介 3.初始化MM32F0140 UART1 4.配置MM32F0140 UART1 DMA接收 5.配置MM32F0140 UART1 DMA ...

  6. 基于STM32之UART串口通信协议(三)接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

  7. 基于ZYNQ 的UART中断实验之串口写数据到DDR3中

    1.参考 UG585 网络笔记 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验 3.实验目的 练习使用UART的中断实验,并将接收到的数据写入到DDR3中. 4.实验过程 建立工程,设 ...

  8. Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)

    一.实现功能 1.服务器端选择待发送的文件,可以是多个 2.开启服务器,支持多客户端接入,能够实时显示每个客户端接入状态 3.等待所有客户端都处于已连接状态时,依次发送文件集给每个客户端,显示每个客户 ...

  9. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

    串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) { OS_ERR err; CPU_INT08U isTheFirstCh; O ...

随机推荐

  1. python基础—sys与os库

    python可以用sys库打印环境变量或者查看当前文件的脚本路径,具体代码: import sysprint(sys.path[2])#打印环境变量print(sys.argv)#当前脚本路径 os库 ...

  2. dubbo could not get local host ip address will use 127.0.0.1 instead 异常处理

    dubbo could not get local host ip address will use 127.0.0.1 instead 查看hostname localhost:spring wls ...

  3. Python字符串练习

    1. 确定一个字符串中有多少个元音字母 def getCount(inputStr): return len([a for a in inputStr if a in "aeiou" ...

  4. vue 用户停留页面超过30分钟未操作 强制退出到登录页面

    先说下主要实现思路,通过给你的根节点绑定mouseover事件,首先声明下当前时间,每次滑过时记录下滑过的时间,两个时间转化成毫秒数,进行对比,如果超过30分钟,则清除token,跳转到login.h ...

  5. ES6 —— 数组总结

    1. map:映射   一个对一个 arr.map(function(item) { ... })    可以配合箭头函数:arr.map(item => ... ) let arr1 = [1 ...

  6. golang channel

    ex1 package main /* goroutine 是由GO运行时管理的轻量级线程 go f(x,y, z) 就启动了一个goroutine, 其中f,x,y,z在当前goroutine中立即 ...

  7. 关于使用 myeclipse连接MySql的问题

    配置Hibernate.cfg.xml测试连接Mysql数据库时老是报错,如下图: 想想这样配置也没有错啊,可是一直测试连接不上.后面上查了一下,需要在连接字符串后面加上?serverTimezone ...

  8. where 常用条件范例

    where() public method Sets the WHERE part of the query. The method requires a $condition parameter, ...

  9. windows7 安装pytorch

    这几天为了运行python的图像转换的项目,不得不安装pytorch,安装了两天,最后把经验记录一下. 如果版本不匹配会抛出很多错误,而网上的各种解决方式有大部分也解决不了问题. 在安装pytorch ...

  10. centos7部署asp.net core 应用程序

    一.运行环境 1.腾讯云与主机一台 2.操作系统是centos7 3.安装.net core sdk 4.安装node及其pm2(安装过程) rpm -Uvh https://packages.mic ...