你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

JDY-08蓝牙模块AT指令响应只能接收到第一个字符

[复制链接]
fengurl 提问时间:2017-4-10 09:00 /
本帖最后由 fengurl 于 2017-4-13 18:47 编辑

小弟使用了一块JDY-08的蓝牙模块,和STM8L051单片机。这个蓝牙模块使用AT命令来配置。本来用电脑的串口助手来下AT命令,是能看到回应的。(比如,下AT+RST,串口助手可以看到返回+OK的字符。)但是,在STM8L051中,用程序来下AT指令,uart收到的响应字符就只有一个“+”,后面的“OK”怎么也接收不到。如果用uart接收中断,则也只有一次中断发生。
1、我已经检查了STM8L051的uart接收,用自发自收的方式来接收字符串,完全没有问题。
2、蓝牙模块接在电脑上,使用串口助手来下命令,也可以有完整的回应。蓝牙模块也没问题。
3、用示波器检查波形,发现STM8L051的RX线上有完整的对应+OK的字符的波形。且波特率在误差范围内。
4、试了其他板子,也换了其他波特率和改变停止位、校验位,都还是只能接收第一个字符。
5、程式上,在接收中断里都是简单的赋值,并没有很多其他的操作。按理不会耽误后面字符的接收。

小弟实在没有其他办法,特求助于各位大神帮忙出出主意,十分感谢!!!
收藏 1 评论6 发布时间:2017-4-10 09:00

举报

6个回答
斜阳__ 回答时间:2017-4-10 09:19:38
总线上有数据,没收到。接收程序有误啦。
fengurl 回答时间:2017-4-10 09:26:01
应该是,但是我的接收程序就3条语句。请帮忙看看有什么错误的地方?
附上程序:
char feng[5];
u8 Res = 0;
void main()
{  
  disableInterrupts();   //关闭系统总中断

  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //内部时钟为1分频 = 16Mhz
  UART1_Init(9600);     //调用串口初始化函数
  enableInterrupts();   //使能系统总中断
  //stm8l15x_it.c文件里的 函数 INTERRUPT_HANDLER(USART1_RX_IRQHandler, 28)
  //等待USART1接收字符中断产生,中断服务函数在  
  while(1)
  {        
    delay(5000);
    printf("AT+RST");
    delay(5000);
  }   
}

void UART1_Init(u16 baudrate)
{
  CLK_PeripheralClockConfig(CLK_Peripheral_USART1 , ENABLE);  //使能USART1时钟
  USART_Init(USART1,                //设置USART1
            baudrate,               //流特率设置
            USART_WordLength_8b,    //数据长度设为8位
            USART_StopBits_1,       //1位停止位
            USART_Parity_No,        //无校验
            (USART_Mode_Rx | USART_Mode_Tx));  //设置为发送接收双模式
  //使能接收中断
  USART_ITConfig(USART1, USART_IT_RXNE , ENABLE);
  USART_Cmd(USART1 , ENABLE);   //使能USART1模块
}


INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler,28)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  extern u8 Res;
  extern char feng[5];
  if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
  {
     USART_ClearITPendingBit(USART1,USART_IT_RXNE);   //清除中断标志位
     
     feng[Res++] = USART_ReceiveData8(USART1);  //(USART1->DR);读取接收到的数据
     if(Res == 5) Res = 0;   
   }
}
fengurl 回答时间:2017-4-12 18:48:22
自己顶一下!
sssdd 回答时间:2017-4-13 13:18:26
软件调试看看,是不是死在了发送中断里面?
然后,把
  extern u8 Res;
  extern char feng[5];
放到函数外面试试。
fengurl 回答时间:2017-4-13 13:54:00
放外面也试过了,还是只能进一次。 是进入一次中断后就没有再进中断了。可以跳出来的。
fengurl 回答时间:2017-4-13 18:45:27
已解决,结帖。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版