大家好:
本人STM8S单片机刚刚开始用,在使用UART通讯功能的时候遇到了困难。想要实现的功能是和PC端的串口调试软件通讯,波特率2400.使用中断输入,然后马上把接收到的数据发回去(最简单的测试那种)。但是貌似波特率设置始终不正确。fmaster用示波器测量过是16Mhz。请看代码:
#include "stm8s105c_s.h"
void UART2_Init(void)
{
CLK_ECKR = 0x00;
CLK_CKDIVR = 0x03;
CLK_CCOR = 0x19;
UART2_CR2 = 0; // 禁止UART发送和接收
UART2_CR1 = 0x00; // b5 = 0,允许UART
// b2 = 0,禁止校验
UART2_CR3 = 0; // b5,b4 = 00,1个停止位
UART2_BRR2 = 0x1B;
UART2_BRR1 = 0xA0;
UART2_CR2 = 0x2C; // b3 = 1,允许发送
// b2 = 1,允许接收
// b5 = 1,允许产生接收中断
}
// 函数功能:从UART3发送一个字符
// 输入参数:ch -- 要发送的字符
// 输出参数:无
// 返 回 值:无
// 备 注:无
void UART2_SendChar(unsigned char ch)
{
while((UART2_SR & 0x80) == 0x00); // 若发送寄存器不空,则等待
UART2_DR = ch; // 将要发送的字符送到数据寄存器
}
main()
{
// 首先初始化UART3
UART2_Init();
_asm("rim"); // 允许CPU全局中断
while(1) // 进入无限循环
{
}
}
@far @interrupt void UART2_Recv_IRQHandler (void)
{
unsigned char ch;
ch = UART2_DR; // 读入接收到的字符
UART2_SendChar(ch); // 将字符发送出去
}
接收和发送都没有问题,但是PC端显示的数据不正确。PC端的波特率,停止位,数据位都和程序设置是一致的,没有问题。请大家帮我看一下哪里可能有问题。不胜感激! |