您的位置 首页 芯闻

根据stm8s103k3单片机串口UART的正确运用共享

基于stm8s103k3单片机串口UART的正确使用分享-我使用的是stm8s103k3,32脚单片机,这个使用手册上说了UART1,UART2,UART3。但是引脚的功能图上只有UART1,并且你打开stm8s103k.h的头文件,里面也只有UART1寄存器的定义说明。所以我认为只有UART1。既然有这个功能,那就用吧,我以为直接可以连接到电脑的串口(COM1),就可以使用了,其实不可以。

最近开始运用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的正确运用共享

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/347100.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部