收到NXP FREEDOM DEVELOPMENT BOARD KW41Z也有几天时间了,这块板子确实我是超级超级想要体验的,说起来还是有所渊源的。早在2015年的一次参加NXP的线下研讨会的时候,就有幸见过这款开发板,当初就是以Thread为主做宣传,同时并做了一些demo的示例供其演示。当时物联网的概念虽然已经很火热了,但是物联网技术还是比较薄弱的,无线组网方面还没有蓝牙mesh,当时最火的就是CC2530的zigbee,和SX1278等的lora;
因此,当初看演示者演示Thread组网和未来Thread的应用的时候,我觉得这是一个新的方向和新的物联网组网的一种方式,当然了,现在的Thread好像也没怎么推广起来,但是当初的心还是没有忘记,正好借此机会,可以好好的玩耍一下KW41Z,确实如愿以偿了。
本次的主角就是KW41Z,该芯片是一款由NXP Semiconductors推出的低功耗蓝牙和802.15.4无线通信解决方案。它集成了ARM Cortex-M0+处理器和多种无线通信协议,包括蓝牙低功耗(Bluetooth Low Energy)和IEEE 802.15.4。KW41Z适用于物联网设备、智能家居、传感器网络等领域,具有低功耗、高性能和丰富的外设接口特点。它还支持NXP的Thread和Zigbee协议栈,为物联网应用提供了更多的选择和灵活性。
拿到开发板当然是要搭建环境和点灯喽,这里官方其实提供了一些SDK,里面包含了IAR和MCUXpressoIDE的工程和中间件,并且是支持keil的,但是建议自己搭建keil的环境,所以本次我先使用IAR的环境来实现环境的应用与点灯操作吧。
IAR本次选择的是8.32版本,然后程序基础工程采用的是SDK中的SDK_2_2_3_FRDM-KW41Z\boards\frdmkw41z\driver_examples\gpio,打开工程之后是这样。
可以根据例程之中的结构知道程序每个部分都是做什么的,知道哪里是初始化,初始化的结构是如何?本次由于只是跑通环境且驱动LED,所以只知道如何驱动IO的高低电平就好了。
首先初始化IO,本程序之中由于想要驱动三色LED,所以需要驱动3个IO,分别是PC1、PA18与PA19。
void BOARD_InitPins(void) {
CLOCK_EnableClock(kCLOCK_PortA); /* Port A Clock Gate Control: Clock enabled */
CLOCK_EnableClock(kCLOCK_PortC); /* Port C Clock Gate Control: Clock enabled */
PORT_SetPinMux(PORTA, PIN18_IDX, kPORT_MuxAsGpio); /* PORTA18 (pin 6) is configured as PTA18 */
PORT_SetPinMux(PORTA, PIN19_IDX, kPORT_MuxAsGpio); /* PORTA19 (pin 7) is configured as PTA19 */
PORT_SetPinMux(PORTC, PIN1_IDX, kPORT_MuxAsGpio); /* PORTC1 (pin 37) is configured as PTC1 */
PORT_SetPinMux(PORTC, PIN6_IDX, kPORT_MuxAlt4); /* PORTC6 (pin 42) is configured as UART0_RX */
PORT_SetPinMux(PORTC, PIN7_IDX, kPORT_MuxAlt4); /* PORTC7 (pin 43) is configured as UART0_TX */
SIM->SOPT5 = ((SIM->SOPT5 &
(~(SIM_SOPT5_LPUART0RXSRC_MASK))) /* Mask bits to zero which are setting */
| SIM_SOPT5_LPUART0RXSRC(SOPT5_LPUART0RXSRC_LPUART_RX) /* LPUART0 Receive Data Source Select: LPUART_RX pin */
);
}
接下来配置IO的模式,也就是配置IO输出。
/* Init output LED GPIO. */
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);
GPIO_PinInit(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, &led_config);
GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &led_config);
接下来是实现对IO的控制,比如输出高电平或者是输出低电平,本次是采用IO反转的模式,也就是toggle,因此代码如下:
delay();
delay();
GPIO_TogglePinsOutput(BOARD_LED_GPIO, 1u << BOARD_LED_GPIO_PIN);
delay();
delay();
GPIO_TogglePinsOutput(BOARD_LED_GREEN_GPIO, 1u << BOARD_LED_GREEN_GPIO_PIN);
delay();
delay();
GPIO_TogglePinsOutput(BOARD_LED_BLUE_GPIO, 1u << BOARD_LED_BLUE_GPIO_PIN);
最后的效果如下:
其实经过这一简单的点灯操作,我觉得这个KW41Z还是比较简单上手的,主要是官方写的例程比较清晰明朗,接下来我会基于例程实现对传感器的驱动,敬请期待~