STM32
直播中

刘敏

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

STM8L串口通信,只能接收,无法发送的原因?

写了一个串口通信实验,接的蓝牙,发送指令后,正确的话应该能收到OK,但是现在就是没有返回。
void USART_Config(void)
{
  GPIO_Init(GPIOC,GPIO_Pin_6,GPIO_Mode_In_PU_No_IT);
  GPIO_Init(GPIOC,GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Fast);  
  
  CLK_PeripheralClockConfig(CLK_Peripheral_USART1,
                            ENABLE);
  USART_DeInit(USART1);
  
  USART_Init(USART1,
             (u32)9600,
             USART_WordLength_8b,
             USART_StopBits_1,
             USART_Parity_No,
             (USART_Mode_TypeDef)(USART_Mode_Tx |USART_Mode_Rx ));
  
  
  USART_Cmd(USART1,ENABLE);
  
  
}

PUTCHAR_PROTOTYPE
{
  if(ch =='n')
  {
    while(!(USART1->SR   USART_FLAG_TC ));
    USART_SendData8(USART1,'r');
    while(!(USART1->SR   USART_FLAG_TC ));
  }
  
  while(!(USART1->SR   USART_FLAG_TXE ));
  USART_SendData8(USART1,ch);
  while(!(USART1->SR   USART_FLAG_TXE ));
  return (ch);
}

//主函数
void main(void)
{
  char zsh[]="AT+CBn";
//  disableInterrupts();
//  enableInterrupts();
  
  CLK_Config();
  USART_Config();
/*  
    GPIO_Init(GPIOB,
              GPIO_Pin_0,
              (GPIO_Mode_TypeDef)GPIO_Mode_Out_PP_High_Slow);//BT_RESET/
  */
  while(1){
//    scan_key();
/*   
   GPIOB ->ODR =~GPIOB ->ODR;
   DelayMS(1000);
   GPIOB ->ODR =~GPIOB ->ODR;
*/
   cnt = 0;
   printf("AT+CArn");
   
   while(temp !=' n'){
     while(!(USART_FLAG_RXNE   USART1_SR) );
     temp = USART_ReceiveData8(USART1);
     buf[cnt++]=temp;
   }
   DelayMS(100);

  }
}






回帖(1)

李梅

2024-5-13 17:32:04
STM8L串口通信只能接收无法发送的原因可能有以下几点:

1. 波特率设置不正确:请确保您的发送设备和接收设备的波特率设置相同。波特率不一致可能导致通信失败。

2. 串口配置问题:请检查您的USART_Config函数中的串口配置是否正确。以下是一些可能需要检查的设置:

   a. 确保USART_Mode为USART_Mode_Rx | USART_Mode_Tx,以启用接收和发送功能。
   b. 确保USART_WordLength为USART_WordLength_8b,表示8位数据长度。
   c. 确保USART_StopBits为USART_StopBits_1,表示1个停止位。
   d. 确保USART_Parity为USART_Parity_No,表示无奇偶校验位。

3. 蓝牙模块设置问题:请检查蓝牙模块的波特率和其他相关设置是否与STM8L设置一致。

4. 硬件连接问题:请检查您的STM8L开发板与蓝牙模块之间的硬件连接是否正确。确保TX(发送)和RX(接收)引脚正确连接。

5. 代码逻辑问题:请检查您的发送函数是否正确实现了发送数据的逻辑。确保在发送数据后,您等待了足够的时间以确保数据被发送。

6. 中断配置问题:如果您使用了中断来处理串口通信,请检查中断配置是否正确。确保USART_IT_RXNE(接收中断)和USART_IT_TXE(发送中断)已启用。

7. 调试问题:尝试使用简单的串口发送和接收示例代码来测试您的硬件和设置。如果示例代码可以正常工作,那么问题可能出在您的应用程序代码中。

请逐一排查上述可能的原因,以找到并解决STM8L串口通信只能接收无法发送的问题。
举报

更多回帖

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