历史上的今天
返回首页

历史上的今天

今天是:2025年03月01日(星期六)

2021年03月01日 | STM8s串口通信uart

2021-03-01 来源:eefocus

我使用的是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来设置




推荐阅读

史海拾趣

Electron Products Inc公司的发展小趣事

Electron Products Inc(简称EPI)成立于XXXX年,由一群对电子技术充满热情的工程师共同创立。初期,公司主要从事电子产品的设计和研发,致力于为小型企业和消费者提供高质量的电子产品。通过不断创新和优化产品,EPI逐渐在市场上树立了自己的品牌形象。

Herth+Buss Fahrzeugteile GmbH & Co KG公司的发展小趣事
监控人员进出,确保安全。
EF Johnson Technologies Inc公司的发展小趣事

作为一家具有社会责任感的企业,EF Johnson公司始终关注环境保护和社会公益。公司积极响应国家节能减排政策,采用环保材料和清洁能源进行生产活动。同时,EF Johnson还积极参与社会公益活动,捐赠资金和物资支持教育事业和贫困地区的发展。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

Hi-Optel Technologly Co Ltd公司的发展小趣事

在产品质量方面,EF Johnson公司始终坚持高标准、严要求。公司建立了完善的质量管理体系,从原材料采购到生产制造再到售后服务,每一个环节都严格把关。这种对品质的执着追求让EF Johnson的产品在市场上赢得了良好的口碑和用户的信赖。随着品牌知名度的提升,EF Johnson的市场份额也稳步增长。

EEMB Co Ltd公司的发展小趣事

EEMB集团一直非常重视企业文化和团队建设。公司注重培养员工的创新意识和团队精神,为员工提供了良好的工作环境和发展机会。同时,公司也积极履行社会责任,关注环保和公益事业,为社会做出了积极贡献。这些举措不仅增强了公司的凝聚力和向心力,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事是基于公开信息和一般情况下的假设而编写的,可能与EEMB Co Ltd公司的实际发展情况存在差异。

Blue Sky Research公司的发展小趣事

Blue Sky Research自成立之初,便以技术创新为核心竞争力。公司不断投入研发,成功开发出一系列高性能的激光二极管模块和光纤耦合激光组件。这些产品凭借其卓越的性能和稳定性,迅速在电子行业中占据了一席之地。随着技术的不断迭代和升级,Blue Sky Research逐渐在激光技术领域树立了行业标杆,成为众多企业争相合作的对象。

问答坊 | AI 解惑

主要的电源种类

    随着科学技术的发展,对电源技术的要求越来越高,规格品种越来越多,技术难度越来越大,涉及的学术领域也越来越广。特种电源(或称工业电源)应用的对象具有多样性、新颖性和复杂性,要求特种电源设备不仅要保证内在性能的完美,而且要 ...…

查看全部问答>

我想裁掉一个员工,各位给个建议!

来自EEWORLD版主群:68652484 谁能告诉我,我想裁掉一个员工,但该员工很特殊,他是我以前公司的同事,我把他招过来的,但是进来发现能力与我想象的差别很大,各位有啥好的建议!…

查看全部问答>

锁屏

在window mobile 中,锁屏是否有相应的API,我用了SHDeviceLockAndPrompt在程序中没有反应,是不是还有别的要求如果要用这个函数?有谁了解的,谢谢大家了。…

查看全部问答>

VS2005 开发WINCE应用程序问题

   VS2005 开发WINCE应用程序时,创建项目时必须从“智能设备”这创建(win32,mfc的应用程序)?然后在选择相应的SDK,不能从WIN32或者MFC出创建?…

查看全部问答>

pc并口能直接和coms电路连接嘛?

pc并口能直接和coms电路连接嘛?…

查看全部问答>

有兴趣来做一下C语言的笔试题

首先应该在机器上运行通过,然后把代码贴上来!~ 题目:程序只有两个变量a和b ,利用宏定义实现a和b的值互换!~ 最先做出来的奖励芯片100!~…

查看全部问答>

STM32+物联网项目方案有奖竟赛--赠野火最新STM32开发板一套

本帖最后由 paulhyde 于 2014-9-15 03:41 编辑 我们论坛里有很多学生和初学者,很多人都是埋头看例程,埋头看手册,很少有人抬起头来思考真正的行业应用,这次的活动是为了让大家能够将学习到的单片机知识和实际的应用做一个结合。 由于征 ...…

查看全部问答>

DIY “数字信号”发生器

数字信号发生器 很多同学都应该有过这样的经历。在拿到一个新的芯片进行设计调试时候,遇到芯片无法正常工作。 总是不知道是因为芯片损坏,还是自己设计错误(软件或硬件) 软件错误:控制的信号没有按照芯片需求给出。      &n ...…

查看全部问答>

家庭监控系统

有个问题请教,本人家中失窃,损失惨重,现在需要安装一套安防系统。应为本人不熟悉这方面,请教大家:那几个牌子的摄像头,硬盘机好一些?另外,我想在手机上也可以监控家中情况,该如何实现?价格为2~3千,4个摄像头…

查看全部问答>

临近毕业,自己做的单片机开发板成本价放送

80块,什么功能都有,兼容avr,配1602,红外遥控 [ 本帖最后由 15138767426 于 2013-10-19 19:24 编辑 ]…

查看全部问答>