本帖最后由 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、程式上,在接收中断里都是简单的赋值,并没有很多其他的操作。按理不会耽误后面字符的接收。 小弟实在没有其他办法,特求助于各位大神帮忙出出主意,十分感谢!!! |
关于创建GATT服务
蓝牙串口接受18位数据(包含包头1、包尾1、校验1)错位
如何使用STM32CubeIde生成BLE Audio工程
用esp8266 at指令实现mqtt心跳响应机制
我需要matter 开发资料 。技术联系方式
小白刚入手nucleo-wb55的板子,自己配置的时候怎么实现nucleo板与usb dongle通讯?比如从核心板传一串数组到usb,官网没找到具体教程,感谢
STM32WB55RG 是否可以使用j-flash进行固件烧录?
【STM32WBA52CG评测】二,硬件平台学习
【STM32WBA评测】一,开箱视频,简单试用
用openThread协议的蓝牙怎么和电脑进行通信?
附上程序:
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;
}
}
然后,把
extern u8 Res;
extern char feng[5];
放到函数外面试试。