在线时间0 小时
UID2112270
ST金币0
蝴蝶豆0
注册时间2014-7-26
初级会员
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
小弟原先学的51,现转战STM8S,可第一个小问题就难道我了,请求大虾帮忙验证下程序:
main.c文件如下,软件是IAR1.42,要实现的功能:给电脑串口发送一个0xAA,有开发板的大虾帮个忙,看看此程序在你们那是否正常,我买的是核心板,没接外部晶振。我直接将串口数据转3232芯片然后和电脑串口大师连接,我先用的库函数编的,发送的数据不对,我就改成寄存器编程,结果还是有问题,我仔细看了手册好即便了,应该没问题的。
我将HSI不分频16M,9600波特率 HSI 2分频8M 9600波特率,分别设置波特率寄存器BRR1 BRR2,发送的数据也不一样,也就是说两次的波特率是不一样的,我看有网友碰到同样的问题。
我用逻辑分析仪看了发送每一位的时间是105US,核算下大概波特率是9500+,误差1%左右。
#include "stm8s.h"
void Delay(uint16_t nCount)
{
while (nCount != 0)
{
nCount--;
}
}
void main(void)
{
Delay(20000);
CLK->CKDIVR=0x00; //0X00 HSI不分频仍为16M
UART1->CR1=0x00; //第4位0 代表8位,该寄存器复位后就是0x00
UART1->CR3=0x00; //第5 4位 0 0 代表1个停止位,该寄存器复位后就是0X00
UART1->BRR2=0x02; //按16M/9600=1666 换16进制 0x0682 此处如果是2分频8M/9600=0x0341 分别设置BRR1=0X34 BRR2=0X01,两次的结果不一样,理论上应该波特率是一样的了
UART1->BRR1=0x68;
UART1->CR2=0x0C; //0x08发送使能,0x04接受使能,0x0C全部使能,0x00全部关闭
UART1_SendData8(0xAA); //调用库函数,实际就是往寄存器里写值
Delay(20000);
UART1->CR2=0x00; //0x08发送使能,0x04接受使能,0x0C全部使能,0x00全部关闭
//如果不加此句,单片机一直在发送0x00,不知道为什么,以前51都没这个问题
while (1)
{
}
}
void assert_failed(u8* file, u32 line)
{
//此处仅为了头文件中有定义,无函数实现,增加个空函数
} |
|