【MAX32630FTHR】--UART之BLE&GPS
本帖最后由 df_flying 于 2017-9-26 23:32 编辑MAX32630FTR其实带了一个BLE模块,可惜该模块需要通过HCI层与MCU完成通信,从而传输数据,其实在官方的DEMO程序中也有该模块程序,可惜研究了好段时间没有调试成功,后来就简单使用了基于CC2540的BT05模块了,而与该模块通信的借口就是UART了,好在FTHR将UART2通过排针给外接了出来,同时UART1通过调试口接了出来,因为调试只使用了TX,故而正好将UART1的TX接入了GPS模块,用来读取GPS数据。
UART的初始化在之前的程序中其实都已经有了,这里不做详细的介绍,直接看程序好了
/**
P3_0RX P3_1TX
*/
const uart_cfg_t ble_uart_cfg = {
.parity = UART_PARITY_DISABLE,
.size = UART_DATA_SIZE_8_BITS,
.extra_stop = 0,
.cts = 0,
.rts = 0,
.baud = 57600,
};
const sys_cfg_uart_t ble_sys_cfg = {
.clk_scale = CLKMAN_SCALE_DIV_4,
.io_cfg = IOMAN_UART(2, IOMAN_MAP_A, IOMAN_MAP_UNUSED, IOMAN_MAP_UNUSED, 1, 0, 0)
};
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. */
//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. */
int ble_uartInit(void)
{
int err;
if ((err = GPIO_Config(&ble_uart_rx_tx)) != E_NO_ERROR) {
return err;
}
if ((err = UART_Init(MXC_UART_GET_UART(2), &ble_uart_cfg, &ble_sys_cfg)) != E_NO_ERROR) {
MXC_ASSERT_FAIL();
return err;
}
return E_NO_ERROR;
}
蓝牙的其实就是串口的发送了,这里直接使用了BLE测试工具,用于蓝牙的收发了
测试代码
void ble_uartTest(void)
{
unsigned char str[]="123456789abcdefghijklmn";
ble_uartSend(str,sizeof(str));
}
GPS模块使用的是UART1的TX,这里使用的模块是NEO-6M,其实原本想使用max-7q的小封装,正好也符合本次的工程,不过这在数据处理上都是一样的,这里利用第三方软件将GPS模块的模块刷新率降低到了1HZ,采用的是中断接收的方式,处理代码如下static uint8_t s_nmeastate = NMEA_INIT;
//printf("%c",sg_aRxBuffer);
switch(s_nmeastate)
{
case NMEA_INIT:
if(sg_aRxBuffer == '$')
{
sg_ppb.idx_curline = 0;
ppbWriteByte(&sg_ppb, sg_aRxBuffer);
s_nmeastate = NMEA_RECEIVING;
}
break;
case NMEA_RECEIVING:
if((sg_aRxBuffer == '\r') || (sg_aRxBuffer == '\n'))
{
ppbSwapBuffer(&sg_ppb);
s_nmeastate = NMEA_INIT;
get_message_flag=1;
//printf("%s",sg_ppb);
}
else
{
ppbWriteByte(&sg_ppb, sg_aRxBuffer);
}
break;
}
得到的数据使用string.h中的函数还是比较好分开的,测试结果如下,数据有加权处理
模块连接如图此处在处理GPS接收时,用到了FREERTOS,这里首先附上freeRTOS的模版代码见附件
页:
[1]