2020-09-21 17:34:06 登录注册 RSS

当前位置: 公理网 >> 正义之家 >> STM8固件库编写使用外部晶振串口通信时,发送是乱码

STM8固件库编写使用外部晶振串口通信时,发送是乱码
发布时间:09-16| 来源:公理网 | 点击发表评论
Altiumdesigner同一个工程中把多个原理图的相同网络编号关联起来1153


因为我需要做9600波特率的串口通信,所以外部接的是11.0592MHz的晶振。时钟初始化程序如下:

voidClock_init(){CLK_DeInit();CLK_HSECmd(ENABLE);//启用外部时钟while(SET!=CLK_GetFlagStatus(CLK_FLAG_HSERDY));//等待外部时钟启动CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);//1分频CLK_ClockSwitchCmd(ENABLE);CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);while(CLK_SOURCE_HSE!=CLK_GetSYSCLKSource());}
然后我的串口初始化是这么写的:

voidUart1_init(){UART1_DeInit();UART1_Init((uint32_t)9600,UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);UART1_Cmd(ENABLE);UART1_ITConfig(UART1_IT_RXNE_OR,ENABLE);enableInterrupts();//中断总使能}
然后接收到的收据就出现了乱码,我就百度了,有人说需要改宏定义。

我就重新看了下stm8s.h文件,发现了端倪

#if!definedHSE_Value#ifdefined(STM8S208)||defined(STM8S207)||defined(STM8S007)||defined(STM8AF52Ax)||\defined(STM8AF62Ax)||defined(STM8AF622x)#defineHSE_VALUE((uint32_t)24000000)/*ValueoftheExternaloscillatorinHz*/#else#defineHSE_VALUE((uint32_t)16000000)/*ValueoftheExternaloscillatorinHz*/#endif/*STM8S208||STM8S207||STM8S007||STM8AF62Ax||STM8AF52Ax||STM8AF622x*/#endif/*HSE_Value*/
竟然是需要自己改动时钟频率。我以为使用固件库之后,能够自动获取时钟频率,并能够根据获得的时钟频率在和那个?UART1_Init()函数中设定的波特率进行计算得到分频值呢!

这里却是需要手动修改晶振频率。当然也可以在编译器中加宏定义来进行修改。

遇到同样问题的朋友,这里注意一下。

?

?
点赞1
评论


抵扣说明:


1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

最新新闻

手机浏览

公理网 版权所有

公理网 Total 0.030093(s) query 6, 报料QQ:点击这里

给我发消息