STM8 固件库编写 使用外部晶振串口通信时,发送是乱码

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

void Clock_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());  
}  

然后我的串口初始化是这么写的:

void Uart1_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 !defined  HSE_Value
 #if defined (STM8S208) || defined (STM8S207) || defined (STM8S007) || defined (STM8AF52Ax) || \
     defined (STM8AF62Ax) || defined (STM8AF622x)
  #define HSE_VALUE ((uint32_t)24000000) /* Value of the External oscillator in Hz*/
 #else
  #define HSE_VALUE ((uint32_t)16000000) /* Value of the External oscillator in Hz*/
 #endif /* STM8S208 || STM8S207 || STM8S007 || STM8AF62Ax || STM8AF52Ax || STM8AF622x */
#endif /* HSE_Value */

竟然是需要自己改动时钟频率。我以为使用固件库之后,能够自动获取时钟频率,并能够根据获得的时钟频率在和那个 UART1_Init()函数中设定的波特率进行计算得到分频值呢!

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

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

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值