社区导航

 

搜索
查看: 1453|回复: 0

[设计过程分享] 【MAX32630FTHR】--UART之BLE&GPS

[复制链接]

39

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-9-26 22:46 | 显示全部楼层 |阅读模式
本帖最后由 df_flying 于 2017-9-26 23:32 编辑

        MAX32630FTR其实带了一个BLE模块,可惜该模块需要通过HCI层与MCU完成通信,从而传输数据,其实在官方的DEMO程序中也有该模块程序,可惜研究了好段时间没有调试成功,后来就简单使用了基于CC2540的BT05模块了,而与该模块通信的借口就是UART了,好在FTHR将UART2通过排针给外接了出来,同时UART1通过调试口接了出来,因为调试只使用了TX,故而正好将UART1的TX接入了GPS模块,用来读取GPS数据。
      UART的初始化在之前的程序中其实都已经有了,这里不做详细的介绍,直接看程序好了
  1. /**
  2.   P3_0  RX   P3_1  TX
  3. */
  4. const uart_cfg_t ble_uart_cfg = {
  5.     .parity = UART_PARITY_DISABLE,
  6.     .size = UART_DATA_SIZE_8_BITS,
  7.     .extra_stop = 0,
  8.     .cts = 0,
  9.     .rts = 0,
  10.     .baud = 57600,
  11. };

  12. const sys_cfg_uart_t ble_sys_cfg = {
  13.     .clk_scale = CLKMAN_SCALE_DIV_4,
  14.     .io_cfg = IOMAN_UART(2, IOMAN_MAP_A, IOMAN_MAP_UNUSED, IOMAN_MAP_UNUSED, 1, 0, 0)
  15. };
  16. const gpio_cfg_t ble_uart_rx_tx = { PORT_3, (PIN_0 | PIN_1), GPIO_FUNC_GPIO, GPIO_PAD_INPUT };       /**< GPIO configuration object for the UART Receive (RX) Pin for Console I/O. */
  17. //const gpio_cfg_t ble_uart_tx = { PORT_3, PIN_1, GPIO_FUNC_GPIO, GPIO_PAD_INPUT };       /**< GPIO configuration object for the UART Transmit (TX) Pin for Console I/O. */

  18. int ble_uartInit(void)
  19. {
  20.     int err;

  21.               if ((err = GPIO_Config(&ble_uart_rx_tx)) != E_NO_ERROR) {
  22.              return err;
  23.         }
  24.                                                 
  25.     if ((err = UART_Init(MXC_UART_GET_UART(2), &ble_uart_cfg, &ble_sys_cfg)) != E_NO_ERROR) {
  26.         MXC_ASSERT_FAIL();
  27.         return err;
  28.     }

  29.     return E_NO_ERROR;
  30. }
复制代码

     蓝牙的其实就是串口的发送了,这里直接使用了BLE测试工具,用于蓝牙的收发了
    测试代码
void ble_uartTest(void)
{
        unsigned char str[]="123456789abcdefghijklmn";
  ble_uartSend(str,sizeof(str));

}
002.bmp

     GPS模块使用的是UART1的TX,这里使用的模块是NEO-6M,其实原本想使用max-7q的小封装,正好也符合本次的工程,不过这在数据处理上都是一样的,这里利用第三方软件将GPS模块的模块刷新率降低到了1HZ,采用的是中断接收的方式,处理代码如下
  1.   static uint8_t s_nmeastate = NMEA_INIT;
  2. //  printf("%c",sg_aRxBuffer);
  3.   switch(s_nmeastate)
  4.   {
  5.     case NMEA_INIT:
  6.       if(sg_aRxBuffer == '$')
  7.       {
  8.         sg_ppb.idx_curline = 0;
  9.         ppbWriteByte(&sg_ppb, sg_aRxBuffer);
  10.         s_nmeastate = NMEA_RECEIVING;
  11.       }
  12.       break;

  13.     case NMEA_RECEIVING:
  14.       if((sg_aRxBuffer == '\r') || (sg_aRxBuffer == '\n'))
  15.       {
  16.         ppbSwapBuffer(&sg_ppb);
  17.         s_nmeastate = NMEA_INIT;
  18. get_message_flag=1;
  19.       //  printf("%s",sg_ppb);
  20.                         }
  21.       else
  22.       {
  23.         ppbWriteByte(&sg_ppb, sg_aRxBuffer);
  24.       }
  25.       break;
  26.   }
复制代码

得到的数据使用string.h中的函数还是比较好分开的,测试结果如下,数据有加权处理

007.bmp
  模块连接如图 009.bmp   此处在处理GPS接收时,用到了FREERTOS,这里首先附上freeRTOS的模版代码见附件




来源:EEWorld MAX32630FTHR设计大赛专区板块,转载请附上链接

max free.zip

1.96 MB, 下载次数: 1



回复

使用道具 举报

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

关闭

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

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-22 22:12 , Processed in 0.075438 second(s), 17 queries , Gzip On, MemCache On.

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