【DigiKey&NXP】NXP FRDM-K32L3A6开发板-手机控制风扇与台灯(七)

部分IO宏定义如下:

/* The UART to use for debug messages. */
#define BOARD_DEBUG_UART_TYPE     kSerialPort_Uart
#define BOARD_DEBUG_UART_BAUDRATE 115200U
#define BOARD_DEBUG_UART_BASEADDR (uint32_t) LPUART1
#define BOARD_DEBUG_UART_INSTANCE 1U
#define BOARD_DEBUG_UART_CLK_FREQ CLOCK_GetIpFreq(kCLOCK_Lpuart1)

#ifndef L298N_IN1_GPIO
#define L298N_IN1_GPIO GPIOB
#endif
#ifndef L298N_IN1_GPIO_PIN
#define L298N_IN1_GPIO_PIN 1U
#endif
#ifndef L298N_IN2_GPIO
#define L298N_IN2_GPIO GPIOA
#endif
#ifndef L298N_IN2_GPIO_PIN
#define L298N_IN2_GPIO_PIN 31U
#endif

/*${macro:start}*/
#define DEMO_LPUART            LPUART1
#define DEMO_LPUART_CLKSRC     kCLOCK_ScgFircAsyncDiv2Clk
#define DEMO_LPUART_CLK_FREQ   CLOCK_GetFreq(kCLOCK_ScgFircAsyncDiv2Clk)

#define BOARD_TPM_BASEADDR TPM0
#define BOARD_FIRST_TPM_CHANNEL  1U
#define BOARD_SECOND_TPM_CHANNEL 0U

/* Get source clock for TPM driver */
#define TPM_SOURCE_CLOCK CLOCK_GetIpFreq(kCLOCK_Tpm0)
/*${macro:end}*/

由上述逻辑处理代码与IO宏定义,这里要说明一下,由于软件有宏定义:

#define BOARD_TPM_BASEADDR TPM0
#define BOARD_FIRST_TPM_CHANNEL 1U
#define BOARD_SECOND_TPM_CHANNEL 0U

因此PTB2对应TPM0_CH0即BOARD_FIRST_TPM_CHANNEL==1,故接收g_rxBuffer[0]==0x01,控制风扇转速;PTB3对应TPM0_CH1即BOARD_SECOND_TPM_CHANNEL==0,故接收g_rxBuffer[0]==0x00,控制台灯亮度。

注明:

(1)、g_rxBuffer[0]只能为0x00或者0x01
(2)、g_rxBuffer[1]只能为0x00 ~ 0x14间的任意十六进制数,占空比步长为5%,分成20等份,超出范围则报错,RGB灯亮红色,此时需要reset开发板,进行数据清除处理。
(3)、串口1凡是接收不符合限定范围的数据格式,则判定为不合法指令,此时均以RGB灯亮红色为指示报异常,此时需要reset开发板,进行数据清除处理。

六、 控制演示

操作演示视频见后续上传附件,由于演示视频文件过大,还待处理完善后分享。演示通过手机端发送两位指定范围的十六进制数,从而实时有效控制台灯亮度与风扇转速。

七、后记

项目调试中,由于用到的是UART1进行数据打印传输,因此MicroUSB处的UART0不再使用,只负责烧录更新固件,因此在调试阶段,使用外部串口调试工具可正常通讯,然而一旦换成蓝牙MX-01P透传模块就控制不了,总结有以下经验:
(1)、由于是采用自购的蓝牙串口模块,如果曾使用AT指令修改过该模块的波特率,不再是115200,而调试阶段,采用串口调试工具的波特率是115200,工程源码中初始化的波特率115200,此时接入蓝牙串口模块则不能正常通信。
(2)、正如前面提到的蓝牙MX-01P模块出厂默认参数配置表中,连接串口响应后会发一段数据,断开串口响应也会发一段数据,此时的串口接收到的数据则不符合限定数据范围格式,因此会发现连上去,发数据控制不了台灯与风扇,其实是数据包已经错误,后面发送的都无效。为直观看到这一报错现象,增加RGB灯亮红色加以提示,需reset开发板进行数据清除处理。
(3)、使用过程中,手指不小心触碰到MX-01P模块,而产生的干扰发出的异常数据、以及超出限定位的数据包,均按异常指令包进行处理,RGB灯亮红色提示,reset开发板进行数据清除。