查看:
1489
|
回复:
1
|
基于MSPM0L1306的开发板-新品评测-串口收发与按键中断控制LED
|
|
1#
电梯直达
1.整体使用评价 这个芯片功耗很低,非常适合物联网使用;这个开发板比较小巧,管家引出丰富,适合直接做核心板进行二次开发。 颜色分类,防止差错,这个非常值得点赞哦。 2.开发项目流程 首先感谢立创商城哦。 我收到的开发板实物如下: 实现任务: 1-按键是SW1控制3个LED显示(LED2~4) 上电时:LED2~4,每秒闪烁一次; 按第1次:只有LED2亮,其它灭; 按第2次:只有LED3亮,其它灭; 按第3次:只有LED4亮,其它灭; 按第4次:LED2~4全亮 按第5次:LED2~4全灭; 按第6次:LED2~4,每秒闪烁一次; 按第7次:只有LED2亮,其它灭; 按第8次:只有LED3亮,其它灭; 按第9次:只有LED4亮,其它灭; 按第10次:LED2~4全亮 按第11次:LED2~4全灭; 重复以上步骤哦 2-串口控制LED: 串口接收到ASCII码:‘0‘~‘5’,控制码命令如下: ‘0’:LED2~4,每秒闪烁一次; ‘1’:只有LED2亮,其它灭; ‘2’:只有LED3亮,其它灭; ‘3’:只有LED4亮,其它灭; ‘4’:LED2~4全亮 ‘5’:LED2~4全灭; 其它字符,不响应; 3-串口回传功能 串口接收到的每个字符都上传回去 开发环境搭建: 1-安装SDK,具体去官网查找 有网友有更详细的流程,如下链接 https://www.elecfans.com/d/2065734.html 2-我采用的是Keil5开发,相关版本和配置如下:
注意添加flash: 前 千万不要选择错误哦。
我已经尽量详细了哦。 编译和下载:
可以有报警,不能有错误哦。 下面介绍详细代码: 核心代码如下: flag=0; } //根据cnt数值进行控制LED效果 if(cnt==0) { DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_4_PIN | GPIO_LEDS_USER_LED_2_PIN | GPIO_LEDS_USER_LED_3_PIN);delay_cycles(16000000); }else if(cnt==1) { DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_2_PIN); DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_3_PIN | GPIO_LEDS_USER_LED_4_PIN);delay_cycles(16000000); }else if(cnt==2) { DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_3_PIN); DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_2_PIN | GPIO_LEDS_USER_LED_4_PIN);delay_cycles(16000000); }else if(cnt==3) { DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_4_PIN); DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_3_PIN | GPIO_LEDS_USER_LED_2_PIN);delay_cycles(16000000); }else if(cnt==4) { DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_4_PIN | GPIO_LEDS_USER_LED_2_PIN | GPIO_LEDS_USER_LED_3_PIN);delay_cycles(16000000); }else if(cnt==5) { DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_4_PIN | GPIO_LEDS_USER_LED_2_PIN | GPIO_LEDS_USER_LED_3_PIN);delay_cycles(16000000); } //防抖延时 delay_cycles(320000); } } //串口中断接收 void UART_0_INST_IRQHandler(void) { uint8_t data; switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) { case DL_UART_MAIN_IIDX_RX: data = DL_UART_Main_receiveData(UART_0_INST); DL_UART_Main_trans_mitData(UART_0_INST, data); if((data>='0')&(data<='5')) { cnt=data-48; } break; default: break; } } //按键中断 void GROUP1_IRQHandler(void) { switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) { case GPIO_SWITCHES_INT_IIDX: flag=1; break; } } LED管脚定义 #define GPIO_LEDS_PORT (GPIOA) #define GPIO_LEDS_USER_LED_3_PIN (DL_GPIO_PIN_26) #define GPIO_LEDS_USER_LED_3_IOMUX (IOMUX_PINCM27) #define GPIO_LEDS_USER_LED_2_PIN (DL_GPIO_PIN_13) #define GPIO_LEDS_USER_LED_2_IOMUX (IOMUX_PINCM14) #define GPIO_LEDS_USER_LED_4_PIN (DL_GPIO_PIN_27) #define GPIO_LEDS_USER_LED_4_IOMUX (IOMUX_PINCM28) 串口参数初始化 SYSCONFIG_WEAK void SYSCFG_DL_UART_0_init(void) { DL_UART_Main_setClockConfig(UART_0_INST, (DL_UART_Main_ClockConfig *) &gUART_0ClockConfig); DL_UART_Main_init(UART_0_INST, (DL_UART_Main_Config *) &gUART_0Config); /* * Configure baud rate by setting oversampling and baud rate divisors. * Target baud rate: 9600 * Actual baud rate: 9576.04 */ DL_UART_Main_setOversampling(UART_0_INST, DL_UART_OVERSAMPLING_RATE_3X); DL_UART_Main_setBaudRateDivisor(UART_0_INST, UART_0_IBRD_33_kHZ_9600_BAUD, UART_0_FBRD_33_kHZ_9600_BAUD); /* Configure Interrupts */ DL_UART_Main_enableInterrupt(UART_0_INST, DL_UART_MAIN_INTERRUPT_RX); DL_UART_Main_enable(UART_0_INST); } 3.成果展示 串口控制效果验证如下,可以对比后面的视频哦 效果验证: 具体效果可以看B站视频链接哦 https://www.bilibili.com/video/BV1Ak4y1S7dU/?vd_source=24f1befd6441a33d7b240715cb07c7b5
生成的hex文件,大家可以下载验证哦,很好玩。 希望立创有更多更好玩的板子开源出来哦。 下次做个电子时钟,采用OLED屏幕,敬请期待哦。 |
|
2#
感谢你参与本次测评,我们将在2月2日前,将50立创采购晶派发至你的账户,请注意查收。期待您更新后续,祝您工作顺利!
|
|