小弟是一名大四的学生。平时单片机语言基础较差,现在搞毕业设计。一不小心选了个STM8的课题。想知道怎么用STM8(因为学校么有钱,所以我用的是微雪的EX-STm8-Q80学习板,STVD和cosmic都已装好)的UART实现通过触摸一块板子的电容式触摸键使另一块板子的LED灯依次点亮。LED灯点亮的代码小弟勉强可以从样例程序理解,但是UART真心不会。想知道怎么样可以快速入门UART数据传送,还望各路大虾指点。说说学习方法。很急!!在线等回复 。现在在看max 3232的样例程序主函数如下main()
{
u8 tmp=0;
Init_UART3();
_asm("rim");
st7920LcdInit(); /*LCD初始化*/
showLine(0,0,lcd_buffer,"MAX3232 Example");
showLine(0,1,lcd_buffer,"USART TX<->RX");
showLine(0,2,lcd_buffer,"Data:");
refreshLCD(lcd_buffer); /*刷新LCD*/
while(1)
{
UART3_sendchar(tmp);
delay_ms(10);
//showLine(6,2,lcd_buffer,"0x%x2",(u16));
refreshLCD(lcd_buffer); /*刷新LCD*/
tmp++;
delay_ms(1000);
}
}
ifndef _WS_UART3_H
#define _WS_UART3_H
#include <ws_lcd_st7920.h>
void Init_UART3(void)
{
UART3_CR1=0x00;
UART3_CR2=0x00;
UART3_CR3=0x00;
// 设置波特率,必须注意以下几点:
// (1) 必须先写BRR2
// (2) BRR1存放的是分频系数的第11位到第4位,
// (3) BRR2存放的是分频系数的第15位到第12位,和第3位
// 到第0位
// 例如对于波特率位9600时,分频系数=2000000/9600=208
// 对应的十六进制数为00D0,BBR1=0D,BBR2=00
UART3_BRR2=0x00;
UART3_BRR1=0x0d;
UART3_CR2=0x2c;//允许接收,发送,开接收中断
}
UART函数如下
void UART3_sendchar(u8 data)
{
while((UART3_SR & 0x80)==0x00);
UART3_DR=data;
}
@far @interrupt void UART3_Recv_IRQHandler (void)
{
u8 data;
data=UART3_DR;
showLine(6,2,lcd_buffer,"0x%x2",(u16)data);
return;
}
#endif /*_WS_UART3_H*/
|