小弟原先学的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) { //此处仅为了头文件中有定义,无函数实现,增加个空函数 } |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
RE:STM8S103 内部振荡HSI 串口发送问题?
大哥们,帮帮忙看看呢,
RE:STM8S103 内部振荡HSI 波特率对,串口数据不对
UART1->BRR1=0x68;
波特率算错了吧。应该写的是0x06,0x82。
RE:STM8S103 内部振荡HSI 波特率对,串口数据不对
RE:来高手哈,STM8S103 内部振荡HSI 波特率对,串口数据不对
RE:来高手哈,STM8S103 内部振荡HSI 波特率对,串口数据不对
RE:来高手哈,STM8S103 内部振荡HSI 波特率对,串口数据不对