最近开始使用stm8s103k3单片机了。据说很好,确实不错。前几天已经试过了GPIO,Timer2,ADC的功能,都比较容易,唯独串口UART使用,破费周折,写出来,供大家借鉴。

我使用的是stm8s103k3,32脚单片机,这个使用手册上说了UART1,UART2,UART3。但是引脚的功能图上只有UART1,并且你打开stm8s103k.h的头文件,里面也只有UART1寄存器的定义说明。所以我认为只有UART1。既然有这个功能,那就用吧,我以为直接可以连接到电脑的串口(COM1),就可以使用了,其实不可以。单片机即使写着提供UART通讯功能,也要连接MAX232转接芯片,我就在这里耽误了许多时间。

1、使用stm8s103上的串口和计算机com口通许的硬件连接:

2、软件设置

(1)发送数据配置

1)编程UART_CR1的M位来定义字长。

2)在UART_CR3中编程停止位的位数。

3)按下列顺序编写波特率寄存器选择要求的波特率。

a)UART_BRR2

b)UART_BRR1

4)设置UART_CR2中的TEN位来使能发送

5)把要发送的数据写进UART_DR寄存器

main.c程序如下:

#include “stm8s103k.h”

void UART1_Init(void)

{

UART1_CR2=0x00;//使发送禁用TEN=0;

UART1_CR1=0x00;//设置M字长,8位数据位

UART1_CR3=0x00;//1位停止位

UART1_BRR2=0x00;//00-0d:9600(fcpu=fmaster=2MHz)

UART1_BRR1=0x0d;//00-1a:4800; 01-34:2400

UART1_CR2=0x08;

}

main()

{

//fmaster=fcpu=2MHz

CLK_ECKR=0x00;

CLK_ICKR=0x01;

CLK_CMSR=0xe1;

CLK_SWR=0xe1;

CLK_CKDIVR=0x18;

UART1_Init();

while (1)

{

unsigned char i;

while(!(UART1_SR & 0x80));//发送寄存器数据是否转移完

UART1_CR2=0x00;//a处

UART1_DR=0xB6;//要发送的数据

UART1_CR2=0x08;//b处

while((UART1_SR & 0x40) ==0);//发送是否完成

}

}

上面的代码是我反复实验过的,如果不加a和b处代码,则接收的数据不稳定,比如发送5,接收到的数据的串口多次开闭,则接收的数据可能是0xB6,或0x67,或0x3B.

(2)接收数据

1)编程UART_CR1的M位来定义字长。

2)在UART_CR3中编程停止位的位数。

3)按下列顺序编写波特率寄存器选择要求的波特率。

a)UART_BRR2

b)UART_BRR1

4)设置UART_CR2中的REN位来使能接收

5)读UART_DR寄存器

a)查询:查询SR中标志位RXNE (读数据寄存器非空)

b)中断:需使能CR2中的RIEN(接收中断使能)

标志位查询方式:

初始化:

void UART1_Init(void)

{

UART1_CR1 = 0x00; //8bit

UART1_CR3 = 0x00;//1 stop bit

UART1_BRR2 = 0x01;

UART1_BRR1 = 0x1A;//4800 baud rate

UART1_CR2 = 0x04;//enable REN

}

Main()函数:

while (!(UART1_SR & 0x20));//Loop until the UART1 Receive Data Register is not empty

RxBuffer= UART1_DR; //Store the received byte in RxBuffer

中断方式:

初始化:

void UART1_Init(void)

{

UART1_CR1 = 0x00; //8bit

UART1_CR3 = 0x00;//1 stop bit

UART1_BRR2 = 0x01;

UART1_BRR1 = 0x1A;//4800 baud rate

UART1_CR2 = 0x24;//enable REN and RIEN

}

UART1接收中断函数:

@far @interrupt void UART1_RX_IRQHandler (void)

{

RxBuffer = UART1_DR; //Store the received byte in RxBuffer

return;

}

UART1接收中断向量(设置中断向量,即将中断服务程序的入口填写到中断向量表中)

struct interrupt_vector const _vectab[] =

{

……

{0x82, UART1_RX_IRQHandler},

……

}

(3)特别注意波特率的计算设置方式

波特率通过配置16位除法器UART_DIV来设置

打开APP精彩内容

点击阅读全文

stm8s103k3 周期 捕获_基于stm8s103k3单片机串口UART的正确使用分享相关推荐

  1. sTC8G1K08+通过串口显示内部电压_基于51单片机的数字电流电压表

    请点上面蓝色字    即可免费订阅!  1.简述 本文介绍了基于STC89C52单片机为核心,分别以ACS712-05芯片和串联分压电路为为电流检测和电压检测电路,并通过AD0809数模转换芯片对电压 ...

  2. delphi 数字识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

  3. stm32车牌识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

  4. arduino智能浇花系统_基于Arduino单片机的智能浇花器

    Internal Combustion Engine & Parts • 119 • 基于Arduino单片机的智能淺花器 卞 云 松 ;张 国 祥 ;任 佳 豪 :陆晨雨 (江海职业技术学院 ...

  5. 智能手环功能模块设计_基于51单片机的智能手环蓝牙模块设计

    龙源期刊网 http://www.qikan.com.cn 基于 51 单片机的智能手环蓝牙模块设计 作者:王烈进 王游司 陈洪燕 孙超 卢宇 来源:<电脑知识与技术> 2018 年第 2 ...

  6. 单片机拟真电路图软件_基于MSP430单片机设计的高效数控直流电源及其测试方法与流程...

    本发明涉及直流电源 技术领域: ,具体涉及一种基于MSP430单片机设计的高效数控直流电源及其测试方法. 背景技术: :电压电流源是很多电子仪器设备研制的关键设计之一,电源在工作时产生的变动或误差,将 ...

  7. 单片机多功能电子琴课设_基于51单片机的多功能电子琴设计.doc

    基于51单片机的多功能电子琴设计 基于51单片机的多功能电子琴的设计 摘要 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器.它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编 ...

  8. 基于单片机的超市储物柜设计_基于51单片机对电子储物柜系统的设计

    电路描述: 安全是我们日常的生活中最关心的问题. 每个人都觉得安全问题是非常至关重要的,在家里的门和安全,可以尽可能多的安全. 为了对于门访问安全 因此,我们打算通过引进一个电子密码锁系统,该系统包括 ...

  9. 51单片机计算器_基于51单片机的倒计时温度检测报警器

    基于51单片机的倒计时温度检测报警器 学习单片机断断续续半年了,在学长学姐的教学帮助下,完成了51单片机的入门学习,开始实践做项目,在一周时间内设计和制作出个人项目.起初,我设计和选择的是12864显 ...

  10. 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟

    今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...

最新文章

  1. ORA-12514 监听程序当前无法识别连接描述符中的服务
  2. 做个有产品意识的工程师
  3. 怎样在计算机页面加密,怎么给文件加密并加密后隐藏起来?
  4. XAML实例教程系列 – 对象和属性
  5. Non-interger Area 分类讨论 奇偶 取模 牛客练习赛95
  6. mysql中binlog_format模式与配置详解
  7. 论文浅尝 - ICML2020 | 拆解元学习:理解 Few-Shots 任务中的特征表示
  8. python 2.7安装某些包出现错误:libxml/xmlversion.h:没有那个文件或目录
  9. 定时器和promise_如何讲清楚Promise?
  10. uvm设计分析——tlm
  11. C#编程VS开发工具安装Nupkg包
  12. 常识——手机当作无线网卡,通过usb与电脑共享网络,让电脑网卡支持5g网络
  13. cass简码大全_CASS分类简码
  14. Composer 基础使用
  15. Revit API 开发周边:对 Element 进行 Reflection
  16. 自定义控件其实很简单 二
  17. 简写的最大公约数写法(不能再忘了)
  18. Unreal4下载安装教程
  19. el-drawer隐藏滚动条(兼容firefox浏览器)
  20. Comparator接口实现排序

热门文章

  1. GISAXS和GIWAXS的分析
  2. 【标书应用场景】畅写Office为电子招投标提速赋能,助力项目招投标业务数字化转型
  3. Javashop 7.0 商城更改logo、名字修改方法
  4. 【路由设置】Macbook 双网卡同时访问内外网
  5. proj编译linux,安装OpenProj配置中文显示
  6. 用tinypng压缩图片
  7. VC 2012 visualstudio的项目属性表 .props文件
  8. 差分进化算法用c语言实现,差分进化算法C++语言实现
  9. Emu8086下载和注册
  10. 元宇宙里过节,英伟达快速打造「冬日仙境」,占地 16 万平米!