OpenEdv-开源电子网

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

想用蓝牙控制led亮灭

[复制链接]

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-4-12
在线时间
0 小时
发表于 2015-4-11 01:15:25 | 显示全部楼层 |阅读模式
5金钱
我的串口中断是这样写的
void USART1_IRQHandler(void)                 //串口中断函数
{
   u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接受中断
{

USART_ClearITPendingBit(USART1,USART_IT_RXNE);
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
Bluetooth_data=Res; //将接收到的数据  Bluetooth_data
     } 



主函数关键部分是这样
LED0=0;
LED1=0;
while(1)
{
 switch(Bluetooth_data)
{
            case  0x01: LED0=!LED0;
                        break; 
case  0x02: LED1=!LED1;
break;
 case  0x03: LED0=!LED0;LED1=!LED1;
       break;
    }
}  

 }
    当我用手机发送命令的时候,开发板上的LED没有任何 反应。这是为什么呢,是我的中断函数哪出错了吗?      

最佳答案

查看完整内容[请看2#楼]

回复【3楼】ansun: --------------------------------- 我试了一下  确实能收到数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-4-12
在线时间
0 小时
 楼主| 发表于 2015-4-11 01:15:26 | 显示全部楼层
回复【3楼】ansun:
---------------------------------
我试了一下  确实能收到数据
回复

使用道具 举报

14

主题

490

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1229
金钱
1229
注册时间
2012-8-4
在线时间
248 小时
发表于 2015-4-11 08:37:01 | 显示全部楼层
参考我发的那个智能家居吧
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-8-23
在线时间
10 小时
发表于 2015-4-11 09:58:50 | 显示全部楼层
void USART1_IRQHandler(void)                 //串口中断函数
{
   u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接受中断
{

USART_ClearITPendingBit(USART1,USART_IT_RXNE);
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
Bluetooth_data=Res; //将接收到的数据  Bluetooth_data
printf("get data=%d",Res);
     } 
加打印看看有没有收到数据先呀?

}
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-8-23
在线时间
10 小时
发表于 2015-4-11 10:50:53 | 显示全部楼层
回复【4楼】魂淡:
---------------------------------
你能确定中断函数在发送数据后有被调用起来吗?
是不是你串口的设置就没对呢?
回复

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-4-12
在线时间
0 小时
 楼主| 发表于 2015-4-11 10:58:37 | 显示全部楼层
回复【5楼】ansun:
---------------------------------
这是我的设置  应该没错   
void uart_init(u32 bound){
    //GPIO?????è??
    GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
     //USART1_TX   A.9
    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);
   
    //USART1_RX   A.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);  

   //Usart1 NVIC ????

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??????
NVIC_Init(&NVIC_InitStructure); //?ù??NVIC_InitStruct?????¨???????????????èNVIC?????÷USART1
  
   //USART ???????è??
   
USART_InitStructure.USART_BaudRate = bound;//??°??è????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);                    //?????®?? 

}

蓝牙控制LED.rar

271.72 KB, 下载次数: 126

回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-8-23
在线时间
10 小时
发表于 2015-4-11 11:14:02 | 显示全部楼层
你现在没办法Res 打出来,就不好确定问题所在了啊?
你这种问题无非就2处可能
1. 串口没有回调中断或者Res 值不对,
2. 你的LED控制没正常。查一下。
回复

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-4-12
在线时间
0 小时
 楼主| 发表于 2015-4-11 11:23:45 | 显示全部楼层
回复【7楼】ansun:
---------------------------------
我已经成功打印出来了  就是我发的命令
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-8-23
在线时间
10 小时
发表于 2015-4-11 11:26:22 | 显示全部楼层
那已经找到问题了吧?
回复

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-4-12
在线时间
0 小时
 楼主| 发表于 2015-4-11 12:11:15 | 显示全部楼层
回复【9楼】ansun:
---------------------------------
没  
我上网找了些别人的  代码 和我的也基本 一样 不知道为什么我的不行  我打算换换单片机和蓝牙 看看是不是出问题了

STM32 手机蓝牙控制实例分享-ST MCU - 21ic电子技术论坛
http://bbs.21ic.com/icview-883443-1-1.html
回复

使用道具 举报

14

主题

490

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1229
金钱
1229
注册时间
2012-8-4
在线时间
248 小时
发表于 2015-4-11 12:47:35 | 显示全部楼层
回复【10楼】魂淡:
---------------------------------
看看这帖字吧http://openedv.com/posts/list/42377.htm,原理差不多了
重点是这样的协议,你可以做一个类似的switch(p_data[0])
{
case 0x31:   //开关命令
switch(p_data[1])//判读那个开关
{
case 0x32:  ////////////////////////////////////led1;
if(p_data[2]==0x31)//开
nrf_gpio_pin_clear(2);
else if (p_data[2]==0x32) //关
nrf_gpio_pin_set(2);
break;
case 0x33:  //////////////////////////////////led2;
  if(p_data[2]==0x31)//开
  nrf_gpio_pin_clear(4);
else if (p_data[2]==0x32) //关
nrf_gpio_pin_set(4);
break;
case 0x31://////////////////////////////////  //jqc;
 if(p_data[2]==0x31)//开
nrf_gpio_pin_set(6);
else if (p_data[2]==0x32) //关
  nrf_gpio_pin_clear(6);
break;
}
break;
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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