大大通开发板评测专区
直播中

小黄

4年用户 10经验值
私信 关注

【大联大世平NXP ZigBee JN5189开发板试用体验】初探JN5189开发板第二期

` 本帖最后由 jf_30632307 于 2020-11-18 00:26 编辑

之前发了一个版本,后来才发现用错账号了,现在用这个账号重新发一次,顺便增加一些更新
开发板有RGB,有按钮,SPI Flash,当然也有留i2c接口,但是我目前手上没有i2c设备,所以就先不加这个功能了。我们简单规划一下这个例程的功能吧:
1)  一个按钮,按下去一次就随机改变一次RGB颜色
2)  另外一个按钮,按下去一次就保存当前的RGB颜色,然后下次开机就显示保存的RGB颜色
废话不多说,赶紧敲代码,详细第二期再说,请耐心等待下期更新!
我们基于helloworld工程来修改,
1.     修改添加LED功能
首先led部分的电路为:
111.png
所以首先我们需要控制LED的3个颜色的IO分别为PIO1,2,3控制R,B,G三种颜色
还是要参照例程,发现添加GPIO要有以下步骤:
1) helloworld.c修改
  1. //
  2. #define APP_BOARD_TEST_LED_PORT BOARD_LED_RED_GPIO_PORT
  3. //添加led配置输出引脚  
  4. gpio_pin_config_t led_config = {
  5.            kGPIO_DigitalOutput,
  6.            0,
  7.        };
  8.   // init led gpio, gpio 0,1,2,3 for led, r,g,b
  9. GPIO_Portinit(GPIO, APP_BOARD_TEST_LED_PORT);
  10. //配置P0_0,P0_1,P0_2,P0_3作为输出引脚
  11.     GPIO_PinInit(GPIO, APP_BOARD_TEST_LED_PORT, 3U, &led_config);
  12.     GPIO_PinInit(GPIO, APP_BOARD_TEST_LED_PORT, 0U, &led_config);
  13.     GPIO_PinInit(GPIO, APP_BOARD_TEST_LED_PORT, 1U, &led_config);
  14.     GPIO_PinInit(GPIO, APP_BOARD_TEST_LED_PORT, 2U, &led_config);
  15.    
  16. //输出0,1,toggle
  17.   GPIO_PortToggle(GPIO, BOARD_LED_RED_GPIO_PORT, 1u << 2U);
  18. GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT, 2U, 0);
  19. GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT, 2U, 1);
2)board.h
  1. #define BOARD_LED_RED_GPIO GPIO
  2. #define BOARD_LED_RED_GPIO_PORT 0U

  3. #define BOARD_LED_RED1_GPIO_PIN 0U
  4. #define BOARD_LED_RED2_GPIO_PIN 1U
  5. #define BOARD_LED_RED3_GPIO_PIN 2U
  6. #define BOARD_LED_RED4_GPIO_PIN 3U
3)pin_mux.c
  1.   /* Initialize GPIO functionality on pin PIO0_3 (pin 6)  */
  2.        GPIO_PinInit(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_PORT, 0U, &LED_RED_config);
  3.         GPIO_PinInit(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_PORT, 1U, &LED_RED_config);
  4.         GPIO_PinInit(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_PORT, 2U, &LED_RED_config);
  5.         GPIO_PinInit(BOARD_INITPINS_LED_RED_GPIO,BOARD_INITPINS_LED_RED_PORT,3U, &LED_RED_config);

2.     添加按键中断触发功能
参考样例工程:jn5189dk6_pint_pin_interrupt
1)    把driver层的fsl_pint.h和fsl_pint.c拷贝到hello工程的driver文件夹

2)     helloworld.c添加:
  1. #include "fsl_pint.h"
  2. #include

  3. int8_t color[3]={1,0,0}; //保存颜色值

  4. /*!
  5. * 按键中断回调函数
  6. */
  7. void pint_intr_callback(pint_pin_int_t pintr, uint32_t pmatch_status)
  8. {
  9.     PRINTF("f
  10. PINT Pin Interrupt %d event detected.", pintr);
  11.     color[0]=rand()%2;
  12.     color[1]=rand()%2;
  13.     color[2]=rand()%2;//生成随机颜色
  14.     GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT, 1U, color[0]);
  15.     GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT, 2U, color[1]);
  16.     GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT, 3U, color[2]);//改变颜色
  17. }

  18. Int main(void){
  19. ……

  20. /* Connect trigger sources to PINT初始化按键中断接口 */
  21.      INPUTMUX_Init(INPUTMUX);
  22.      INPUTMUX_AttachSignal(INPUTMUX,0U,kINPUTMUX_GpioPort0Pin4ToPintsel);
  1.      PINT_Init(PINT);
  2.     /* Setup Pin Interrupt 0 for rising edge 配置上升沿中断回调 */
  3.       PINT_PinInterruptConfig(PINT, 0U, kPINT_PinIntEnableRiseEdge, pint_intr_callback);
  4.       /* Enable callbacks for PINT0 by Index */
  5.       PINT_EnableCallbackByIndex(PINT, 0U);
添加了以上代码就可以随机产生不同的灯亮的组合,这样按键之后就可以改变颜色了。

3.   添加保存数据到flash功能
1) 添加flash工程里面的driver层:fsl_flash.c和fsl_flash.h

2)helloworld.c添加
  1. #define FLASH_BUFF_SIZE 4
  2. #define FLASH_START_ADDRESS 0x10000  //定义保存flash的地址
  3. #define FLASH_START_PAGE (FLASH_START_ADDRESS / FLASH_PAGE_SIZE) //获取地址的页数
  4. 。。。
  5. uint32_t readData[FLASH_BUFF_SIZE] = {0};//init,r,g,b,color读取flash的颜色值
  6. uint32_t olddata[FLASH_BUFF_SIZE]={0};//用来对比旧数据,如果不一样就保存数据到flash
  7. 。。。
  8. //保存数据到flash
  9. static void saveData(void){
  10.           FLASH_ErasePages(FLASH, FLASH_START_PAGE, 1); //保存之前一定要先擦除,不然保存不了

  11.           uint32_t *pu32Start = (uint32_t *)(FLASH_START_ADDRESS);
  12.           uint32_t temp[4];

  13.           FLASH_Program(FLASH, pu32Start, readData, FLASH_BUFF_SIZE * sizeof(uint32_t));//保存到flash的API
  14.           PRINTF("save data 0=%d,1=%d,2=%d,3=%d
  15. ",readData[0],readData[1],readData[2],readData[3]);//打印颜色值
  16. }
这里的flash保存数据要注意的就是保存之前记得清空flash,不然是保存不了的。
4.   最终实现
每次按键都随机改变颜色,如果颜色改变了,就保存下来,下次开机的时候自动显示该颜色。


` Video_20201118_122442_901.gif

更多回帖

发帖
×
20
完善资料,
赚取积分