STM32
直播中

李皓圳

7年用户 1092经验值
私信 关注
[问答]

STM8L152xx使用LSI作为时钟源的时候,USART不能使用是怎么回事?

  int main(void)
{
CLK_LSICmd (ENABLE);    //使能LSI
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);//LSI为系统时钟
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//不分频  
  CLK_SYSCLKSourceSwitchCmd (ENABLE);//使能切换

  CLK_PeripheralClockConfig (CLK_Peripheral_USART1,ENABLE);//开启USART时钟
  //设置USART参数9600,8N1 ,*使能接收和发送*
  USART_Init(USART1,9600,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx|USART_Mode_Rx);
  USART_ITConfig (USART1,USART_IT_RXNE,ENABLE);//使能接收中断
  USART_Cmd (USART1,ENABLE);//使能USART
  enableInterrupts(); //使能总中断
while(1)
    {

        USART_SendData8(USART1,0x03);//发送16进制  
    }
}
就这几行代码,数据发送不出来改了波特率为1200还能发出来但是数据不对。   但是把时钟源切换为HSI就行


回帖(1)

成尔秩

2024-5-13 18:16:14
STM8L152xx使用LSI作为时钟源时,USART不能使用的问题可能是由于以下几个原因导致的:

1. 波特率设置错误:在您的代码中,您使用了9600作为波特率。请确保您的USART_Init函数中的波特率参数正确设置。例如,如果您使用的是9600波特率,确保您的PLL和时钟设置能够支持这个波特率。

2. USART初始化参数错误:在您的代码中,您使用了USART_Wor作为初始化参数。这可能是一个拼写错误,正确的参数应该是USART_WordLength_8b。请检查您的USART_Init函数中的参数是否正确。

3. 时钟配置问题:确保您的时钟配置能够支持USART的运行。在您的代码中,您已经设置了LSI为系统时钟源,并且没有分频。请确保这个时钟配置能够满足USART的运行要求。

4. USART中断配置问题:如果您的USART通信依赖于中断,请确保您已经正确配置了USART的中断。例如,您可能需要配置USART的接收中断和发送中断。

5. 硬件连接问题:请检查您的硬件连接,确保USART的RX和TX引脚已经正确连接到相应的设备。

6. 软件问题:请检查您的代码中是否有其他可能导致USART无法正常工作的问题。例如,您可能需要在USART_Init函数之后调用USART_Cmd(ENABLE)来启用USART。

综上所述,要解决STM8L152xx使用LSI作为时钟源时USART不能使用的问题,您需要检查波特率设置、USART初始化参数、时钟配置、中断配置、硬件连接以及软件问题。确保所有这些方面都正确无误,USART应该能够正常工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分