打印
[STM32F1]

科星F107开发板学习笔记之蓝牙模块控制LED灯

[复制链接]
2294|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ren0zhe|  楼主 | 2013-11-25 11:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
科星F107开发板学习笔记应用篇之蓝牙控制LED灯的学习
硬件准备:
1、科星F107开发板
2、CORX-HC05蓝牙串口模块
3、串口转USB线(可选)
4、装有安卓2.2系统以上的智能手机一台(支持蓝牙)
软件准备:
1、BluetoothDemo.apk(自主开发,可提供安卓源码)
2、串口调试助手
3、开发板程序:“科星F107开发板应用篇之蓝牙控制LED灯”(IAR5.4)

科星F107开发板学习笔记应用篇之蓝牙控制LED灯的学习.pdf (423.89 KB)






这里我们用到了开发板的两路串口,USART1和USART2,USART负责与电脑连接,USART2负责通过蓝牙模块与安卓手机连接。下面我们看一下开发板的原理图:



下面我们开分析下程序,程序内容相对简单,主要就是两路串口的配置,程序如下:
  SystemInit();
  TIM2_Configuration();   
  /* NVIC configuration */
  NVIC_Configuration();
  /*Configure the GPIO ports */
  GPIO_Configuration();
  /* Configure the USART ports*/
  USART_Configuration();

这里讲一下串口2所用到的GPIO口的配置,
void GPIO_Configuration(void)
{
    GPIO_InitTypeDefGPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

    GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);//重映像USART2的引脚

     /* Configure USARTx_Tx asalternate function push-pull */
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD,&GPIO_InitStructure);

    /* Configure USARTx_Rx asinput floating */
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_6;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOD,&GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA,&GPIO_InitStructure);

    /* Configure USARTx_Tx asalternate function push-pull */
   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);

    /* Configure USARTx_Rx asinput floating */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
}
我们看一下寄存器手册的内容就清楚了,科星F107开发板上USART2使用的是PD5和PD6引脚作为TX和RX引脚,所以这里我们需要把复用重映射和调试I/O配置寄存器的响应值设置为USART2是重映像的,如下图所示:



   下面我们来看主函数的操作:
while (1)
  {
   if(r_flag==1)
    {
      if(RxBuffer1[1]==0x31)
        GPIO_SetBits(GPIOA, GPIO_Pin_4);
      elseif(RxBuffer1[1]==0x30)
        GPIO_ResetBits(GPIOA, GPIO_Pin_4);
     if(RxBuffer1[2]==0x31)
        GPIO_SetBits(GPIOA, GPIO_Pin_5);
      elseif(RxBuffer1[2]==0x30)
         GPIO_ResetBits(GPIOA,GPIO_Pin_5);
     if(RxBuffer1[3]==0x31)
        GPIO_SetBits(GPIOA, GPIO_Pin_7);
      elseif(RxBuffer1[3]==0x30)
        GPIO_ResetBits(GPIOA, GPIO_Pin_7);
     if(RxBuffer1[4]==0x31)
        GPIO_SetBits(GPIOA, GPIO_Pin_6);
      elseif(RxBuffer1[4]==0x30)
        GPIO_ResetBits(GPIOA, GPIO_Pin_6);


   USART_SendData(USART1, RxBuffer1[0]);//发送接收到的字符
   while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)//等得发送完成
    {
    }

   USART_SendData(USART1, RxBuffer1[1]);//发送接收到的字符
   while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)//等得发送完成
    {
    }  

   USART_SendData(USART1, RxBuffer1[2]);//发送接收到的字符
   while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)//等得发送完成
    {
    }  
   USART_SendData(USART1, RxBuffer1[3]);//发送接收到的字符
   while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)//等得发送完成
    {
    }  
   USART_SendData(USART1, RxBuffer1[4]);//发送接收到的字符
   while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)//等得发送完成
    {
    }  

    r_flag=0;
    }
  }

前面是根据串口接收到的数据进行对LED灯的亮灭操作,一共5个16进制数,第一位是没用的,一个前置字节,2~5位分别为0x31(1)或者0x30(0),0x31表示灯亮,0x30表示灯灭。
这里两路串口的数据接收缓冲区均为RxBuffer1[],所以手机发送数据可以使开发板灯亮灭,电脑通过USB转串口线发送正确数据也可以控制开发板的亮灭的,程序还把外部发送给开发板的数据通过串口1打印到电脑上。
说明,这里外部可以发送16进制数据,“0x80 0x31 0x31 0x31 0x31”,也可以发送字符“21111”,第一个字符不做解析,可为任意值。
下面我们来看演示,如下图:

是通过串口调试助手(HEX)发送的,串口调试助手HEX显示


是通过手机蓝牙演示程序发送的,串口调试助手HEX显示


是通过手机蓝牙演示程序发送的,串口调试助手字符显示


手机蓝牙演示程序的使用说明,请见文档“CORX-HC05模块控制LED灯使用说明.pdf”

沙发
ren0zhe|  楼主 | 2013-11-25 11:39 | 只看该作者
科星F107开发板应用篇之蓝牙控制LED灯.rar (4.87 MB)

使用特权

评论回复
板凳
ren0zhe|  楼主 | 2013-11-25 11:41 | 只看该作者
蓝牙安卓程序,有兴趣的留言,开源安卓代码
BluetoothDemo.rar (286.56 KB)

使用特权

评论回复
地板
ren0zhe|  楼主 | 2013-11-25 11:41 | 只看该作者
CORX-HC05模块控制LED灯使用说明.pdf (421.87 KB)

使用特权

评论回复
5
ren0zhe|  楼主 | 2013-11-25 11:42 | 只看该作者

使用特权

评论回复
6
ren0zhe|  楼主 | 2013-11-25 11:43 | 只看该作者
自己写的串口调试助手,基本功能可以用了,还不是很完善,有兴趣的留言,这个也可以开源源码的
VS2012的,C#语言



使用特权

评论回复
7
luoyunchuan| | 2015-12-28 16:23 | 只看该作者
ren0zhe 发表于 2013-11-25 11:41
蓝牙安卓程序,有兴趣的留言,开源安卓代码

LZ好人,最近在学习这方面知识,表示自己菜鸟一个,LZ可否把安卓源码发我邮箱,感激不尽

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:科星F107&F407开发板官网  http://corxstm32.taobao.com/      QQ交流群: 144728423

12

主题

255

帖子

5

粉丝