历史上的今天
返回首页

历史上的今天

今天是:2025年08月14日(星期四)

正在发生

2020年08月14日 | 基于stm8s103k3单片机串口UART的正确使用分享

2020-08-14 来源:elecfans

最近开始使用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来设置

基于stm8s103k3单片机串口UART的正确使用分享

推荐阅读

史海拾趣

Baneasa SA公司的发展小趣事

在快速发展的同时,Baneasa SA始终注重技术创新和可持续发展。公司不断投入研发资金,开发新的电子元器件产品和技术,以满足市场的不断变化和客户的需求。同时,公司也注重环保和节能减排,采用环保材料和节能技术,致力于实现可持续发展。

这些故事虽然基于假设和虚构,但尽量遵循了电子行业企业发展的一般规律和趋势。它们旨在展示Baneasa SA在电子行业中的可能发展历程和成就,而不涉及任何主观评价或褒贬。请注意,这些故事并非真实事件,仅用于说明公司在电子行业发展的可能性和方向。

Ho Chien Electronics Group Inc公司的发展小趣事

在快速发展的同时,Baneasa SA始终注重技术创新和可持续发展。公司不断投入研发资金,开发新的电子元器件产品和技术,以满足市场的不断变化和客户的需求。同时,公司也注重环保和节能减排,采用环保材料和节能技术,致力于实现可持续发展。

这些故事虽然基于假设和虚构,但尽量遵循了电子行业企业发展的一般规律和趋势。它们旨在展示Baneasa SA在电子行业中的可能发展历程和成就,而不涉及任何主观评价或褒贬。请注意,这些故事并非真实事件,仅用于说明公司在电子行业发展的可能性和方向。

Apex [Apex Microtechnology]公司的发展小趣事

Apex Microtechnology成立于1980年,自创立之初,公司便专注于功率模拟技术的研发,为工业、国防和航空航天等领域提供高精确控制电流、电压和速度的解决方案。凭借其在功率驱动器和放大器领域的专业知识,Apex Microtechnology逐渐在电子行业中崭露头角,吸引了众多客户的关注。

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

AEC Design公司的发展小趣事
为了进一步提升技术实力和市场竞争力,AEC Design公司积极寻求与其他企业或研究机构的战略合作。通过与上下游企业建立紧密的供应链合作关系,公司确保了原材料的稳定供应和产品质量的有效控制。同时,与高校和研究机构的合作则为公司带来了源源不断的技术创新动力。
Bellin公司的发展小趣事
某电子行业的AEC Design公司凭借其独特的技术创新能力,成功开发出一款具有颠覆性的新产品。这款产品不仅满足了市场的迫切需求,还凭借其卓越的性能和用户体验赢得了消费者的广泛好评。随着产品的热销,公司的知名度和市场份额迅速提升,为公司的持续发展奠定了坚实基础。

问答坊 | AI 解惑

发本AVR的书

我也是在网上下载的…

查看全部问答>

求Razavi经典著作Design of analog IC

求这本书,谁有的希望传上来看看…

查看全部问答>

【藏书阁】模拟电子技术多媒体课件 PPS

[ 本帖最后由 wzt 于 2010-2-26 19:18 编辑 ]…

查看全部问答>

麻烦各位帮我看一看我的程序哪里有问题,拜托了,我是新手阿

#include #define TIMER0H 0xD8 #define TIMER0L 0XF0 #define  uchar unsigned char #define  ON   0 #define  OFF  1 TableLED[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6 ...…

查看全部问答>

谁能够提供USB键盘鼠标或触摸屏驱动的源码 WINDOWS下的

谁能够提供USB键盘鼠标或触摸屏驱动的源码…

查看全部问答>

怪现象,我通过IOCTL循环查询I/O状态,状态是正确的,但一进中断再读取I/O状态,却发现I/O状态被改变了,中断里没去改变I/O的状态。

怪现象,我通过IOCTL循环查询I/O状态,状态是正确的,但一进中断再读取I/O状态,却发现I/O状态被改变了,中断里没去改变I/O的状态。…

查看全部问答>

DIY导航避障车规整贴(三)

软件部分:能够通过串口实现无线控制 目前在优化上位机界面硬件部分:GPS模块调通,电机控制模块代码编写中。GPS能读出 当前坐标 速度以及时间,由于参加本次活动的人员大部分是学生,都在准备考试所以进度在这段时间会降慢些。…

查看全部问答>

紧急求助。。。。flash被锁。。。。

把8962程序烧到9b92中了,然后就被催了,。。。重新烧9b92的烧不进去了。。。求解。。。。…

查看全部问答>

开关电源拓扑结构概述 资料

主回路——开关电源中,功率电流流经的通路。主回路一般包含了开关电源中的开关器件、储能器件、脉冲变压器、滤波器、输出整流器、等所有功率器件,以及供电输入端和负载端。   开关电源(直流变换器)的类型很多,在研究开发或者维修电源系统时 ...…

查看全部问答>

ti有ccs5的28335例程吗?

ti有ccs5的28335例程吗?官网没找到,论坛也没找到 …

查看全部问答>