TA的每日心情 | 开心 昨天 13:36 |
|---|
签到天数: 203 天 连续签到: 3 天 [LV.7]常住居民III
进士
- 积分
- 2735
|
本帖最后由 eefocus_3941691 于 2025-7-6 14:18 编辑
收到HPM5E00开发板后,由于SDK V1.9版本尚未支持该型号,开发板只能暂时存放在包装盒中,等待新版本发布。经过一段时间的等待,终于在7月1日收到了SDK V1.10版本发布的通知。我立即下载了最新版本,打开start_gui工具后,欣喜地发现界面中已经明确显示支持HPM5E00evk开发板。这意味着现在可以正式开始基于这款开发板的探索和开发工作了。
既然开发板上最显眼的就是LED数码管,那就从它开始探索吧。
首先,我查阅了开发板的原理图,确认数码管驱动方式。接着在SDK的例程中寻找相关的驱动代码,发现官方文档中已经有了关于EUI的说明,而且已经提供了EUI的示例,这正是控制数码管显示的基础。
我修改了示例代码,试着让数码管显示自增数字,即每500ms数字加一。
数码管虽小,却是一个很好的切入点。通过它,可以逐步熟悉这款芯片的EUI库函数,为更复杂的开发打下基础。
一、EUI功能描述
用户手册中有关于EUI的描述
可以理解EUI是用于嵌入式系统中的矩阵键盘或LED显示控制,至于如何使用,使用好官方提供的库函数即可。
二、软件部分
使用start_gui工具从例程中生成工程
生成后,可以用SEGGER Embedded Studio 8.24打开工程,进行修改
在main函数中,注释掉原有的函数,调用一个自己的函数
- //led_disp_config();
- segment_disp();
复制代码 segment_disp内容如下:
- void segment_disp(void)
- {
- eui_scan_disp_data_t disp_data;
-
- disp_data.data_8x8[0] = s_disp_code_8_seg[(count/10000)%10];
- disp_data.data_8x8[1] = s_disp_code_8_seg[(count/1000)%10];
- disp_data.data_8x8[2] = s_disp_code_8_seg[(count/100)%10];
- disp_data.data_8x8[3] = s_disp_code_8_seg[(count/10)%10];
- disp_data.data_8x8[4] = s_disp_code_8_seg[count%10];
- eui_set_scan_disp_data(BOARD_EUI,0,&disp_data);
- count++;
- }
复制代码 就是每次调用函数,count加一,并在5个数码管上显示各位数字
在while(1)中增加
- segment_disp();
- board_delay_ms(500);
复制代码 每500ms,增加一次count
eui引脚初始化
init_eui_pins(BOARD_EUI);
其中#define BOARD_EUI HPM_EUI1
- void init_eui_pins(EUI_Type *ptr)
- {
- if (ptr == HPM_EUI1) {
- HPM_IOC->PAD[IOC_PAD_PB26].FUNC_CTL = IOC_PB26_FUNC_CTL_EUI1_CK;
- HPM_IOC->PAD[IOC_PAD_PB27].FUNC_CTL = IOC_PB27_FUNC_CTL_EUI1_SH;
- HPM_IOC->PAD[IOC_PAD_PB28].FUNC_CTL = IOC_PB28_FUNC_CTL_EUI1_DI;
- HPM_IOC->PAD[IOC_PAD_PB29].FUNC_CTL = IOC_PB29_FUNC_CTL_EUI1_DO;
- } else {
- ;
- }
- }
复制代码
eui初始化函数
- static void init_eui_config(void)
- {
- eui_ctrl_config_t ctrl_config;
- eui_get_default_ctrl_config(BOARD_EUI, &ctrl_config);
- ctrl_config.work_mode = eui_work_mode_8x8;
- ctrl_config.clko_freq_khz = 100;
- ctrl_config.key_filter_ms = 50;
- ctrl_config.disp_data_invert = 0xFF;
- ctrl_config.scan_invert = 0x00;
- ctrl_config.dedicate_out_cfg = BOARD_EUI_DEDICATE_OUT_LINES;
- ctrl_config.dedicate_in_cfg = 0x0000;
- eui_config_ctrl(BOARD_EUI, s_eui_clock_freq, &ctrl_config);
- printf("clko_tm_us:%d, slot_tm_us:%d, hold_tm_us:%d, disp_tm_us:%d, filter_tm_us:%d\n\n",
- eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_clko_time), eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_slot_time),
- eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_hold_time), eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_disp_time),
- eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_filter_time));
- eui_set_irq_enable(BOARD_EUI, eui_irq_area_mask);
- intc_m_enable_irq_with_priority(BOARD_EUI_IRQ, 1);
- eui_set_enable(BOARD_EUI, true);
- }
复制代码 三、运行效果
|
|