OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5408|回复: 6

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

[复制链接]

1

主题

5

帖子

0

精华

新手上路

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

小弟实在没有其他办法,特求助于各位大神帮忙出出主意,十分感谢!!!

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-4-10
在线时间
4 小时
 楼主| 发表于 2017-4-10 09:15:29 | 显示全部楼层
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-4-10
在线时间
4 小时
 楼主| 发表于 2017-4-10 09:17:45 | 显示全部楼层
本帖最后由 fengurl 于 2017-4-10 09:18 编辑

开始以为是STM8L051不行,但是之后换了正点原子的STM32F103,结果还是只能收到第一个字符。@正点原子
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-4-12 01:18:31 | 显示全部楼层
fengurl 发表于 2017-4-10 09:17
开始以为是STM8L051不行,但是之后换了正点原子的STM32F103,结果还是只能收到第一个字符。@正点原子

用串口调试一下先,看看有无问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-4-10
在线时间
4 小时
 楼主| 发表于 2017-4-12 18:45:31 | 显示全部楼层
串口调试试过了,是可以的。但是用MCU就是不行。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-4-10
在线时间
4 小时
 楼主| 发表于 2017-4-12 18:47:15 | 显示全部楼层
本帖最后由 fengurl 于 2017-4-12 18:48 编辑

但是我的接收程序就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;   
   }
}
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-9-22
在线时间
5 小时
发表于 2017-10-5 22:05:09 | 显示全部楼层
楼主问题是怎么解决的,能否分享一下?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 02:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表