stm8s开发(三) UART的使用:串口通信

发布者:幸福的人生最新更新时间:2020-02-24 来源: eefocus关键字:stm8s  UART  串口通信 手机看文章 扫描二维码
随时随地手机看文章

串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、wifi)通信,也可以作为和其他单片机通信的工具。


STM8S的通用异步收发器(UART)主要特性:


●  全双工的,异步通信


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


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


一般的,我们使用串口通信主要是关心几点参数:波特率、停止位、奇偶校验位。


其次就是如何发送、如何接收数据,这里介绍的使用阻塞式发送数据、中断方式接收数据。


以下代码是初始化串口,参数为:115200   1停止位   无校验位


void Init_UART1(void)

{     

  CLK_PCKENR1 |= 0X04;  //使能USART1时钟 

  

  UART1_CR1=0x00;

  UART1_CR2=0x00;

  UART1_CR3=0x00;

  // 必须先写BRR2

  // 例如对于波特率位115200时,分频系数=16000000/115200=139

  // 对应的十六进制数为008B,BBR1=08,BBR2=0B

  

  UART1_BRR2=0x0B;

  UART1_BRR1=0x08;

  

  UART1_CR2=0x2c;//允许接收,发送,开接收中断

}


波特率设置需要通过计算,STM8S的默认主频是16M,得到写入寄存器的数为139。注意,这里需要先写入BRR2再写入BRR1,且格式特殊:

BRR1应夹在BRR2之间!(需要修改波特率需要好好理解)


编程手册描述如下:

阻塞式发送函数(发送一个字节)如下:


void SendChar(u8 dat)

{

  while((UART1_SR & 0x80)==0x00);

  UART1_DR = dat;

}

只需要将数据加载到UART1_DR寄存器里就算是OK。



终端接收数据函数如下:


//将收到的数据再发送出去

#pragma vector= UART1_R_OR_vector//0x19

__interrupt void UART1_R_OR_IRQHandler(void)

{

  u8 res;

  res = UART1_DR;

  

  return;

}


使用中断需要声明中断函数入口,并且指定中断表序号(串口1接收中断向量为0x19):

#pragma vector= UART1_R_OR_vector//0x19

__interrupt void UART1_R_OR_IRQHandler(void)



只要串口接收到一个字节的数据就会立即进入此函数,数据存放在UART1_DR寄存器中。

注意:要使用中断这个功能需要在mian函数中加入开启中断语句:

_RIM;

关键字:stm8s  UART  串口通信 引用地址:stm8s开发(三) UART的使用:串口通信

上一篇:stm8s中UART的用法(四种UART中断)
下一篇:STM8L151系列 使用定时器计时,全局滴答器jiffes

推荐阅读最新更新时间:2024-11-02 17:17

查询法串口通信程序
这是一个简单的用查询发的串口通信程序,能吧串口收到的数据马上回发过去。希望读初学者有用. #include reg52.h #define uint unsigned int #define uchar unsigned char void init() { TMOD=0x20;//定时器1方式2作为波特率发生器 TH1=0XF3; //装初值 波特率为4800bps的初值 TL1=0XF3; TR1=1; //启动定时器1 SCON=0X50; //设置串口工作方式为方式1 PCON=0X80; //加倍波特率后为4800 TI=0;//清发送中断标志位 RI=0;//清接收中断标志位 } void main() { u
[单片机]
K210学习记录(2)——UART(串口)
0、引言 本系列博客仅作为本人学习K210单片机的学习记录,主要学习其内部资源使用,作为初学者难免有错误之处,如有发现还望指出。 硬件:Sipeed Maix Dock开发板(推荐官方KD233开发板) 软件:Kendryte IDE(基于VS Code 开发) 文档: Kendryte IDE使用手册 Standalone SDK编程指南 芯片技术规格书 SDK: Kendryte SDK MaixPy/drive 1、UART——interrupt 以下代码为官方代码库“kendryte_uart-interrupt-standalone”修改而成,实现的功能为将电脑发送的字符串,在中断回调函数中存入缓存v_b
[单片机]
K210学习记录(2)——<font color='red'>UART</font>(串口)
STM8S_ 004_UART基本收发数据
写在前面 Ⅰ 做软件开发的人都知道打印信息的重要,说到打印信息,我们就不得不说UART串口打印。做单片机开发的人,打印信息主要的来源就是UART串口打印。因此,关于UART相关的知识就比较重要。 printf、scanf这种标准的函数不只是可以在电脑上可以使用,在我们单片机上也同样可以使用,本文只讲述关于UART的基础知识,关于printf、scanf这一块后面将再次给大家整理一篇文章。 本文将结合“STM8S参考手册”和软件源代码给大家讲述关于UART的基础知识和用法。 为方便大家阅读,本文内容已经整理成PDF文件: http://pan.baidu.com/s/1i5uWhJR UART基础知识 Ⅱ 通用异
[单片机]
STM8S_ 004_<font color='red'>UART</font>基本收发数据
8051单片机(STC89C52)以轮询方式实现串口通信(51接收数据后发送回PC端)
#include STC89C5xRC.H int main() { char buf; TMOD = 0x21; //设定timer1的工作模式 SCON = 0x50; //设置串行通信格式 TH1 = 0xE6; //设定timer1的初始值 TL1 = 0xE6; TR1 = 1; //开启timer1 while(1) { if(RI == 1) { //如果收到数据 buf = SBUF; RI = 0; SBUF = buf;//将收到的数据发回去 while(TI == 0); //等待数据发送完毕 TI = 0;
[单片机]
8051单片机(STC89C52)以轮询方式实现<font color='red'>串口通信</font>(51接收数据后发送回PC端)
Tiny210裸机之UART串口操作
start.S源码: .global _start _start: ldr sp, =0xD0030000 @初始化堆栈 b main ==================================================================== main.c: #include clock.h #include led.h #include uart.h #include lib.h int main(void) { led_init(); // 设置对应管脚为输出 clock_init(); // 初始化时钟 uart_init(); // 初始化UART0
[单片机]
STM8S提示错误信息的原因及解决办法
把产品样板连上 STM8S-DISCOVERY 开始全速运行,发现先后弹出两个错误提示框: 第一个:Error:swim error : comm timeout 点击确定后,继续全速运行,弹出第二个错误。 第二个错误:Error: gdi-error : flash memory not accessible while core is running 经过反复研究,发现,是VACAP引脚的电容焊错了,焊成了 10nF 的电容了,修改为 1uF 的电容后,一切正常,错误全部消失。看起来,就是这个电容的缘故导致了上述错误。
[单片机]
STM32F103学习笔记——串口通信
在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义函数。如下: int fputc(int ch, FILE *f) // 发送数据 { USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USA
[单片机]
DSP 与PC 机串行通讯的设计
  1 引言   DSP 既是Digital Signal Pricessing 的缩写,也是Digital Signal Pricessor 的缩写。前者是指数字信号处理的理论和方法,后者则是指用于数字信号处理的可编程微处理器。TMS320F240 系列是在TMS320F2000TM 平台下的一种定点DSP 芯片,是专为数字电机控制和其他控制应用系统而设计的16位定点运算的DSP。它集合了DSP 的高速运算功能与电机的强大控制能力,为控制系统应用提供了一种理想的解决方案。TMS320F240 片内外设有一个16 位的同步串行外围接口(SPI),一个用于串行通讯接口的SCI 模块,双10 位A/D 转换器,带中断的看门狗定时器模
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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