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

查看: 9598|回复: 6

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

[复制链接]

2

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2014-7-31 23:44:22 | 显示全部楼层 |阅读模式
小弟原先学的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)


//此处仅为了头文件中有定义,无函数实现,增加个空函数
}
回复

使用道具 举报

2

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2014-8-1 10:01:49 | 显示全部楼层

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


大哥们,帮帮忙看看呢,
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 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。
回复 支持 反对

使用道具 举报

2

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2014-8-3 10:57:31 | 显示全部楼层

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

没错的,STM8是这样的,中间2位放一个寄存器,我用逻辑分析仪看过了,实际波特率是9500+,有点来去的
回复 支持 反对

使用道具 举报

2

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2014-8-5 22:26:31 | 显示全部楼层

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

问题解决了,我用同样的程序另外找了个USB转TTL的测试是好的,原因出在MAX3232芯片上,可能坏了,导致电平读取错误,以后有问题还得多注意下硬件
回复 支持 反对

使用道具 举报

16

主题

560

回帖

1

蝴蝶豆

金牌会员

最后登录
2020-6-25
发表于 2014-8-6 21:59:15 | 显示全部楼层

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

调试时用示波器观察就可判断是硬件或是软件问题,
回复 支持 反对

使用道具 举报

0

主题

8

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-8-16 17:17:17 | 显示全部楼层

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

STM8S内部振荡频率是16MHZ,但精度是正负5%,所以在传输频率高的情况下,数据的后几位会出错。可以测一下Occ管脚的输出频率,并计算出与设定的偏差,可以通过寄存器来修正,详细请参考AN2822文档。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版