历史上的今天
今天是:2025年03月08日(星期六)
2020年03月08日 | STM8 固件库编写 使用外部晶振串口通信时,发送是乱码
2020-03-08 来源:eefocus
因为我需要做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()函数中设定的波特率进行计算得到分频值呢!
这里却是需要手动修改晶振频率。当然也可以在编译器中加宏定义来进行修改。
遇到同样问题的朋友,这里注意一下。
史海拾趣
|
哪位大哥有The MultiMediaCard System Specification Version 3.31 有较早的版本的也可以,100分相谢,要是分不够我可以再加!谢谢了! 因为我想要读取一些MMC卡的基本信息。 可以发到我的邮箱:m-ja@163.com… 查看全部问答> |
|
前一段时间是针对专门的问题,发了一些帖子,这次在从最基本简单的入手,让我们一起逐步地深入吧。 1.首先我们可以在桌面上创建一个文件夹,my_proj。 2.把StellarisWare下的一些文件夹复制到my_proj下,其中progjects文件夹用来保存我们要创建的 ...… 查看全部问答> |
|
向版主请教:在3.xx固件库中STM32PWM模式的默认电平设置 版主及各位大师好 小弟想请教一下STM32 通用定时器PWM输出时 默认电平控制问题 原来基于1.0的库写的一段TIM2定时器3通道的PWM输出配置 将 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 时开机上电 及软件关闭3 ...… 查看全部问答> |
|
在2812使用EV的时候可以直接写EVx.ACTRx直接控制PWM输出的强制高、强制低,在使用ePWM的器件上应该怎么配置,从而可以强制高、强制低呢… 查看全部问答> |




