你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

来高手哈,STM8S103 内部振荡HSI 波特率对,串口数据不对

[复制链接]
jacky1983 提问时间:2014-7-31 23:44 /
小弟原先学的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)


//此处仅为了头文件中有定义,无函数实现,增加个空函数
}
收藏 评论6 发布时间:2014-7-31 23:44

举报

6个回答
jacky1983 回答时间:2014-8-1 10:01:49

RE:STM8S103 内部振荡HSI 串口发送问题?


大哥们,帮帮忙看看呢,
废鱼 回答时间:2014-8-2 14:02:58

RE:STM8S103 内部振荡HSI 波特率对,串口数据不对

UART1->BRR2=0x02; //按16M/9600=1666 换16进制 0x0682    此处如果是2分频8M/9600=0x0341 分别设置BRR1=0X34 BRR2=0X01,两次的结果不一样,理论上应该波特率是一样的了
UART1->BRR1=0x68;

波特率算错了吧。应该写的是0x06,0x82。
jacky1983 回答时间:2014-8-3 10:57:31

RE:STM8S103 内部振荡HSI 波特率对,串口数据不对

没错的,STM8是这样的,中间2位放一个寄存器,我用逻辑分析仪看过了,实际波特率是9500+,有点来去的
jacky1983 回答时间:2014-8-5 22:26:31

RE:来高手哈,STM8S103 内部振荡HSI 波特率对,串口数据不对

问题解决了,我用同样的程序另外找了个USB转TTL的测试是好的,原因出在MAX3232芯片上,可能坏了,导致电平读取错误,以后有问题还得多注意下硬件
feel-376797 回答时间:2014-8-6 21:59:15

RE:来高手哈,STM8S103 内部振荡HSI 波特率对,串口数据不对

调试时用示波器观察就可判断是硬件或是软件问题,
zxcv8250 回答时间:2014-8-16 17:17:17

RE:来高手哈,STM8S103 内部振荡HSI 波特率对,串口数据不对

STM8S内部振荡频率是16MHZ,但精度是正负5%,所以在传输频率高的情况下,数据的后几位会出错。可以测一下Occ管脚的输出频率,并计算出与设定的偏差,可以通过寄存器来修正,详细请参考AN2822文档。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版