查看: 2848|回复: 2

[原创] 基于K64的多功能蓝牙小车-连载1

[复制链接]
  • TA的每日心情
    慵懒
    2020-2-14 09:42
  • 签到天数: 196 天

    [LV.7]常住居民III

    3

    主题

    213

    帖子

    0

    高级会员

    Rank: 4

    积分
    695
    最后登录
    2024-1-24
    发表于 2016-7-6 23:34:14 | 显示全部楼层 |阅读模式
    本帖最后由 sagitattoo 于 2016-7-6 23:34 编辑


    1、小车的组装
            小车的组装没有什么好说的,只需要一把螺丝刀,配上详细的DIY说明书,分分钟搞定。
    1467815137701030.png

    2、开放环境的搭建
            工欲善其事必先利其器,我这里选择的开放路径是:Kinetis SDK + Keil 5.14 。
            通过Kinetis SDK,可以快速方便的对K64F开发板进行启动配置,并且为板上硬件及接口提供了便捷的操作方法,大大缩短的开发周期和难度。
            下图为基于SDK的基本程序结构:
             tree.png
            “startup”为MK64F12的启动文件;
            “drivers”为MK64F12外设驱动;
            “source”为应用程序入口;
            “board”为板上资源驱动;
            “utilities”为一些与硬件无关的软件功能。

    3、蓝牙模块测试

            蓝牙作为一种无线接入模式,因其种种优点受到各方面的追捧。受益于电子电路高度集成的成果,对于蓝牙的开发,已经可以集成到一个模块中,这个模块将复杂的蓝牙数据交换过程封装成简单的串口输入输出交互。
            K64F开发板专门为JY-MCU蓝牙模块预留了4个接口,其实也就是2个电源接口和一对串口。根据原理图,这对串口接到K64F12的UART 4模块。
             1467817504538246.png
            手头没有电烙铁,只能将蓝牙模块用胶带固定。别看简陋,信号连接还不错。
            测试流程,当通过手机蓝牙发出“r”时,板上LED显示红色;“b”时,显示蓝色;“g”时,显示绿色。
            主要测试代码如下:
            在pin_mux.c的BOARD_InitPins()函数中,使能PortB、PortC和PortE的时钟,并将PC14、PC15设置为第三复用功能,将PB21、PB22和PB26设为GPIO。
    1. void BOARD_InitPins(void)
    2. {
    3.      CLOCK_EnableClock(kCLOCK_PortB);
    4.      CLOCK_EnableClock(kCLOCK_PortC);
    5.      CLOCK_EnableClock(kCLOCK_PortE);
    6.    
    7.      PORT_SetPinMux(PORTC, 14U, kPORT_MuxAlt3);
    8.      PORT_SetPinMux(PORTC, 15U, kPORT_MuxAlt3);
    9.      PORT_SetPinMux(PORTB, 21U, kPORT_MuxAsGpio);
    10.      PORT_SetPinMux(PORTB, 22U, kPORT_MuxAsGpio);
    11.      PORT_SetPinMux(PORTE, 26U, kPORT_MuxAsGpio);
    12. }
    复制代码
            在uart_polling_transfer.c的main函数中,初始化UART 4,并通过polling(查询)的方法,判断蓝牙模块接收到的字符,并反映到板上的RGB LED上。
    1. int main(void)
    2. {
    3.      uint8_t ch;
    4.      uart_config_t config;
    5.      gpio_pin_config_t led_config ={
    6.                 kGPIO_DigitalOutput,  0,
    7.      };
    8.         
    9.      BOARD_InitPins();
    10.      BOARD_BootClockRUN();

    11.      GPIO_PinInit(BOARD_LED_RED_GPIO,BOARD_LED_RED_GPIO_PIN,&led_config);
    12.      GPIO_PinInit(BOARD_LED_BLUE_GPIO,BOARD_LED_BLUE_GPIO_PIN,&led_config);
    13.      GPIO_PinInit(BOARD_LED_GREEN_GPIO,BOARD_LED_GREEN_GPIO_PIN,&led_config);
    14.    
    15.      UART_GetDefaultConfig(&config);
    16.      config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
    17.      config.enableTx = true;
    18.      config.enableRx = true;

    19.      UART_Init(UART4, &config, CLOCK_GetFreq(UART4_CLK_SRC));

    20.      while (1)
    21.      {
    22.           UART_ReadBlocking(UART4, &ch, 1);

    23.           if(ch == 'r')
    24.           {
    25.                      GPIO_WritePinOutput(BOARD_LED_RED_GPIO,BOARD_LED_RED_GPIO_PIN,0);
    26.                      GPIO_WritePinOutput(BOARD_LED_BLUE_GPIO,BOARD_LED_BLUE_GPIO_PIN,1);
    27.                      GPIO_WritePinOutput(BOARD_LED_GREEN_GPIO,BOARD_LED_GREEN_GPIO_PIN,1);
    28.            }
    29.           else if(ch == 'b')
    30.           {
    31.                     GPIO_WritePinOutput(BOARD_LED_RED_GPIO,BOARD_LED_RED_GPIO_PIN,1);
    32.                     GPIO_WritePinOutput(BOARD_LED_BLUE_GPIO,BOARD_LED_BLUE_GPIO_PIN,0);
    33.                     GPIO_WritePinOutput(BOARD_LED_GREEN_GPIO,BOARD_LED_GREEN_GPIO_PIN,1);
    34.            }
    35.           else if(ch == 'g')
    36.            {
    37.                     GPIO_WritePinOutput(BOARD_LED_RED_GPIO,BOARD_LED_RED_GPIO_PIN,1);
    38.                     GPIO_WritePinOutput(BOARD_LED_BLUE_GPIO,BOARD_LED_BLUE_GPIO_PIN,1);
    39.                     GPIO_WritePinOutput(BOARD_LED_GREEN_GPIO,BOARD_LED_GREEN_GPIO_PIN,0);
    40.            }
    41.           else
    42.           {
    43.                     GPIO_WritePinOutput(BOARD_LED_RED_GPIO,BOARD_LED_RED_GPIO_PIN,0);
    44.                     GPIO_WritePinOutput(BOARD_LED_BLUE_GPIO,BOARD_LED_BLUE_GPIO_PIN,0);
    45.                     GPIO_WritePinOutput(BOARD_LED_GREEN_GPIO,BOARD_LED_GREEN_GPIO_PIN,0);
    46.           }
    47.         }
    48. }
    复制代码
           通过此测试,完成了对手机控制到开发板做出反应的信号链路测试,为下一步中控制小车电机打下基础。
          购买的电机驱动和电池还没有到货,期待ing。


          附件是蓝牙测试工程。

    bluetooth_test.rar

    2.16 MB, 下载次数: 1, 下载积分: 威望 1

    蓝牙测试工程

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-5-9 08:12
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    34

    主题

    801

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2279
    最后登录
    2021-8-11
    发表于 2016-7-7 08:08:35 | 显示全部楼层
    期待,加油            
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-7-7 09:47:28 | 显示全部楼层
    加油楼主!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-2 05:37 , Processed in 0.118792 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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