OpenEdv-开源电子网

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

我的STM32F103和蓝牙通信只能发不能收,和电脑的就没问题,求大神指教

[复制链接]

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
发表于 2017-2-15 11:51:24 | 显示全部楼层 |阅读模式
10金钱
我的STM32F103和蓝牙通信只能发不能收,和电脑的就没问题,模块也用51试过了,也没问题,求大神指教

void USART1_IRQHandler(void)
{
    u8 i=0;
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){
                i=USART_ReceiveData(USART1);
                USART_SendData(USART1,i);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
                USART_ClearFlag(USART1,USART_FLAG_TXE);

                USART_ClearITPendingBit(USART1,USART_IT_RXNE);

                GPIO_Write(GPIOB,0xaaaa);
        }               
}


#include "stm32f10x_exti.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "misc.h"

void USART_RCC_Configuration(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}

void USART_GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
}

void USART_NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

void USART_Configuration(void)
{
        USART_InitTypeDef USART_InitStructure;

        USART_InitStructure.USART_BaudRate=9600;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

        USART_Init(USART1,&USART_InitStructure);
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
        USART_Cmd(USART1,ENABLE);
        USART_ClearFlag(USART1,USART_FLAG_TC);
}

void USART_SendStr(u8 *s)
{
        u8 i;
        for(i=0;s!=0;i++){
                  USART_SendData(USART1,s);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
                USART_ClearFlag(USART1,USART_FLAG_TXE);
        }
}


#include "stm32f10x.h"

void USART_Configuration(void);
void USART_NVIC_Configuration(void);
void USART_GPIO_Configuration(void);
void USART_RCC_Configuration(void);
void USART_SendStr(u8 *s);

void Delay(u32 t)
{
        while(t--);
}

int main(void)
{
          /* 设置系统时钟为72M */
          SystemInit();
        USART_RCC_Configuration();        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        USART_GPIO_Configuration();
        USART_NVIC_Configuration();
        USART_Configuration();

        USART_SendStr("AT+NAMEB-watch\r\n");
        Delay(6000000);
        USART_SendStr("AT\r\n");
        Delay(6000000);

         USART_SendData(USART1,'a');        
         while(1){
          }
}


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

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2017-2-8
在线时间
12 小时
发表于 2017-2-15 12:00:27 | 显示全部楼层
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 12:02:24 | 显示全部楼层
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-8-18
在线时间
14 小时
发表于 2017-2-15 14:32:40 | 显示全部楼层

我也碰到这个问题,调了几天了也还是没有调通
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-15 14:54:00 | 显示全部楼层
应该是串口中断接收中断的设置有问题,建议先看看有数据来了之后是否进了串口接收中断。
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 14:59:35 | 显示全部楼层
lvkanger 发表于 2017-2-15 14:54
应该是串口中断接收中断的设置有问题,建议先看看有数据来了之后是否进了串口接收中断。

用电脑模拟是可以的,用蓝牙就没进去,中断标志都没变
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-8-18
在线时间
14 小时
发表于 2017-2-15 15:08:20 | 显示全部楼层
迷路的麋鹿 发表于 2017-2-15 14:59
用电脑模拟是可以的,用蓝牙就没进去,中断标志都没变

你使用的蓝牙模块是什么模块,我现在怀疑是不是接口问题
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 15:12:57 | 显示全部楼层
xxx 发表于 2017-2-15 15:08
你使用的蓝牙模块是什么模块,我现在怀疑是不是接口问题

我用的是bt05
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 15:13:34 | 显示全部楼层

蓝牙模块我用51的单片机试了,可以收发
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 15:39:44 | 显示全部楼层
顶一下~
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 15:50:49 | 显示全部楼层
不要沉啊~
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 16:20:03 | 显示全部楼层
急急急啊!
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-15 17:37:30 | 显示全部楼层
求指导!!!
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-15 18:41:42 | 显示全部楼层
迷路的麋鹿 发表于 2017-2-15 14:59
用电脑模拟是可以的,用蓝牙就没进去,中断标志都没变

硬件连接什么的确定没问题吧!
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-8-18
在线时间
14 小时
发表于 2017-2-15 20:23:57 | 显示全部楼层

是不是 你发送数据的时候没有延时,导致蓝牙没有收到正确的数据
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-8-18
在线时间
14 小时
发表于 2017-2-15 20:28:45 | 显示全部楼层

而且你看下
void USART_SendStr(u8 *s)
{
        u8 i;
        for(i=0;s!=0;i++){
                  USART_SendData(USART1,s);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
                USART_ClearFlag(USART1,USART_FLAG_TXE);
        }
}
这个FOR循环是有问题的s!='\0',不发送'\0'符号
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2017-2-16 14:34:10 | 显示全部楼层
你串口接受段程序有问题贝
回复

使用道具 举报

9

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2015-10-16
在线时间
49 小时
发表于 2017-2-16 16:39:33 | 显示全部楼层
USART_ClearFlag(USART1,USART_IT_RXNE);   清除接收标记写这个吧。
void USART_SendStr(u8 *s)这个函数写的不会吧?  
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 10:44:29 | 显示全部楼层
lvkanger 发表于 2017-2-15 18:41
硬件连接什么的确定没问题吧!

没问题
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 10:44:45 | 显示全部楼层
xxx 发表于 2017-2-15 20:23
是不是 你发送数据的时候没有延时,导致蓝牙没有收到正确的数据

是单片机接收不了..
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 10:47:19 | 显示全部楼层
xxx 发表于 2017-2-15 20:28
而且你看下
void USART_SendStr(u8 *s)
{

void USART_SendStr(u8 *s)
{
        u8 i;
        for(i=0;s!=0;i++){
                  USART_SendData(USART1,s);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
                USART_ClearFlag(USART1,USART_FLAG_TXE);
        }
}
这段是这样的,之前可能没复制好
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 10:49:59 | 显示全部楼层
xxx 发表于 2017-2-15 20:28
而且你看下
void USART_SendStr(u8 *s)
{

昨天去开会了,没及时回复不好意思
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-17 11:58:11 | 显示全部楼层
迷路的麋鹿 发表于 2017-2-17 10:49
昨天去开会了,没及时回复不好意思

既然根本就没有进中断,硬件连接也没有问题,说明还是中断设置有问题吧。建议你用串口调试助手调试下STM32的收发,看看能不能发现什么问题。
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 12:22:45 | 显示全部楼层
lvkanger 发表于 2017-2-17 11:58
既然根本就没有进中断,硬件连接也没有问题,说明还是中断设置有问题吧。建议你用串口调试助手调试下STM3 ...

就是因为电脑调试没问题,所以很烦恼啊
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-17 13:25:05 | 显示全部楼层
迷路的麋鹿 发表于 2017-2-17 12:22
就是因为电脑调试没问题,所以很烦恼啊

既然程序没问题,蓝牙模块也是OK的,那么硬件问题的概率比较大。如果硬件也查不出来问题,建议你这样试一下。用STM32连接蓝牙模块,同时,用串口调试助手监听RX,TX两根线上的数据,看看有什么发现没。
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 13:38:07 | 显示全部楼层
lvkanger 发表于 2017-2-17 13:25
既然程序没问题,蓝牙模块也是OK的,那么硬件问题的概率比较大。如果硬件也查不出来问题,建议你这样试一 ...

什么意思
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 13:38:18 | 显示全部楼层
lvkanger 发表于 2017-2-17 13:25
既然程序没问题,蓝牙模块也是OK的,那么硬件问题的概率比较大。如果硬件也查不出来问题,建议你这样试一 ...

怎么连
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-17 14:41:26 | 显示全部楼层

串口监听不会嘛?
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 15:21:35 | 显示全部楼层
(⊙o⊙)哦
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 15:22:15 | 显示全部楼层

怎么监听...
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-17 15:22:32 | 显示全部楼层
lvkanger 发表于 2017-2-17 14:41
串口监听不会嘛?

监听哪一边
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
发表于 2017-2-18 08:50:56 | 显示全部楼层
顶一下........................
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-18 08:57:07 | 显示全部楼层

额,监听,真不知道该怎么解释。用USB转TTL线,只用RX和GND两根线,RX线接STM32与蓝牙的RX或者TX线,就可以进行串口数据的监听啦,试试吧,调试常用手段。
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-18 12:01:59 | 显示全部楼层
lvkanger 发表于 2017-2-18 08:57
额,监听,真不知道该怎么解释。用USB转TTL线,只用RX和GND两根线,RX线接STM32与蓝牙的RX或者TX线,就可 ...

没试过,我试一下吧
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-18 12:20:57 | 显示全部楼层
lvkanger 发表于 2017-2-18 08:57
额,监听,真不知道该怎么解释。用USB转TTL线,只用RX和GND两根线,RX线接STM32与蓝牙的RX或者TX线,就可 ...

我直接用示波器试了一下,蓝牙有接收和发送,单片机只把程序开头我手动发的指令发了过来,中断里把接收到的字符发送出来的指令没发送出来
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-18 13:26:50 | 显示全部楼层
迷路的麋鹿 发表于 2017-2-18 12:20
我直接用示波器试了一下,蓝牙有接收和发送,单片机只把程序开头我手动发的指令发了过来,中断里把接收到 ...

在中断函数加一个点亮LED灯的操作,看看有没有进中断函数呢?
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-19 10:38:13 | 显示全部楼层
lvkanger 发表于 2017-2-18 13:26
在中断函数加一个点亮LED灯的操作,看看有没有进中断函数呢?

试过了,没有进
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-20 09:12:07 | 显示全部楼层

那根据现在的情况看应该就是中断配置有问题了!
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-20 09:31:11 | 显示全部楼层
你好像没有NVIC_PriorityGroupConfig()中断分组,
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);这个函数我也没用。
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-24 11:34:08 | 显示全部楼层
lvkanger 发表于 2017-2-20 09:31
你好像没有NVIC_PriorityGroupConfig()中断分组,
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); ...

void USART_NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
这个就是吧
回复

使用道具 举报

9

主题

50

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-13
在线时间
14 小时
 楼主| 发表于 2017-2-24 11:34:58 | 显示全部楼层
lvkanger 发表于 2017-2-20 09:31
你好像没有NVIC_PriorityGroupConfig()中断分组,
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); ...

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);这个是之前留下的
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7210
金钱
7210
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-2-24 11:54:47 | 显示全部楼层
迷路的麋鹿 发表于 2017-2-24 11:34
void USART_NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig()你搜一下这个函数!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 20:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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