欢迎来到天天文库
浏览记录
ID:8799976
大小:52.50 KB
页数:8页
时间:2018-04-08
《stm8的c语言编程--uart应用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、STM8的C语言编程(8)--UART应用 串口通讯也是单片机应用中经常要用到,今天的实验就是利用STM8的UART资源,来进行串口通讯的实验。实验程序的功能是以中断方式接收串口数据,然后将接收到的数据以查询方式发送到串口。程序代码如下,首先要对STM8的UART进行初始化,初始化时要注意的是波特率寄存器的设置,当求出一个波特率的分频系数(一个16位的数)后,要将高4位和低4位写到BRR2中,而将中间的8位写到BRR1中,并且必须是先写BRR2,再写BRR1。同样也是利用ST的开发工具,生成一个C语言的框架,然后修改其中的main.c,同时由于需要用到中断服
2、务,因此还要修改stm8_interrupt_vector.c。修改后,编译连接,然后下载到开发板上,再做一根与PC机相连的线,把开发板的串口与PC机的串口连接起来,注意,2、3脚要交叉。在PC机上运行超级终端,设置波特率为9600,然后每按下一个按键,屏幕上就显示对应的字符。修改后的main.c和stm8_interrupt_vector.c如下:// 程序描述:初始化UART,以中断方式接收字符,以查询方式发送// UART通讯参数:9600bps,8位数据,1位停止位,无校验 #include"STM8S207C_S.h"//函数功能:初始化UART/
3、/输入参数:无//输出参数:无//返回值:无//备注:无voidUART3_Init(void){ LINUART_CR2=0; //禁止UART发送和接收 LINUART_CR1=0; //b5=0,允许UART//b2=0,禁止校验 LINUART_CR3=0; //b5,b4=00,1个停止位 //设置波特率,必须注意以下几点://(1)必须先写BRR2//(2)BRR1存放的是分频系数的第11位到第4位,//(3)BRR2存放的是分频系数的第15位到第12位,和第3位到第0位//
4、例如对于波特率位9600时,分频系数=2000000/9600=208//对应的十六进制数为00D0,BBR1=0D,BBR2=00 LINUART_BRR2=0; LINUART_BRR1=0x0d; //实际的波特率分频系数为00D0(208)//对应的波特率为2000000/208=9600 LINUART_CR2=0x2C; //b3=1,允许发送//b2=1,允许接收//b5=1,允许产生接收中断} //函数功能:从UART3发送一个字符//输入参数:ch--要发送的字符//输出参数:无//返回值:无//备 注:无voidUAR
5、T3_SendChar(unsignedcharch){ while((LINUART_SR&0x80)==0x00); //若发送寄存器不空,则等待 LINUART_DR=ch; //将要发送的字符送到数据寄存器}main(){ //首先初始化UART3 UART3_Init(); _asm("rim"); //允许CPU全局中断 while(1) //进入无限循环 { } } //函数功能:UART3的接收中断服务程序//输入参数:无//输出参数:无//返回值:无@far@interr
6、uptvoidUART3_Recv_IRQHandler(void){ unsignedcharch; ch=LINUART_DR; //读入接收到的字符 UART3_SendChar(ch); //将字符发送出去} /* BASICINTERRUPTVECTORTABLEFORSTM8devices* Copyright(c)2007STMicroelectronics*/ typedefvoid@far(*interrupt_hand
7、ler_t)(void);structinterrupt_vector{ unsignedcharinterrupt_instruction; interrupt_handler_tinterrupt_handler;}; @far@interruptvoidNonHandledInterrupt(void){/*inordertodetectunexpectedeventsduringdevelopment,itisrecommendedtosetabreakpointonthefollowinginstruction*/return;
8、}externvoid_stext(); /*
此文档下载收益归作者所有