麻袋

  • 2025-04-07
  • 发表了主题帖: LVGL 图形库求助

    使用LVGL8.3.3  ,使用了编码器; 问题:按键的时候能打印 LV_KEY_ENTER ;但是不会触发事件, 进入encoder_key_handler打印,求助大佬指点 lv_group_t * g_encoder_group; // 焦点组 extern lv_indev_t * indev_encoder; static void encoder_key_handler(lv_event_t *e) { lv_event_code_t code = lv_event_get_code(e); lv_key_t key = lv_indev_get_key(lv_indev_get_act()); printf("event code=%d, key=%d \r\n", (int)code, (int) key); uint32_t key1 = *(uint32_t*)lv_event_get_param(e); printf("Event key1: %d\n", key1); lv_indev_t *indev = lv_indev_get_act(); printf("Input device type: %d\n", indev->driver->type); } void setup_scr_screen111(lv_ui *ui){ // 创建焦点组 g_encoder_group = lv_group_create(); lv_indev_set_group(indev_encoder, g_encoder_group); // 编码器绑定到焦点组 // 将对象加入焦点组(例如容器和按钮) lv_group_add_obj(g_encoder_group, ui->screen_btn_CC); lv_group_add_obj(g_encoder_group, ui->screen_btn_CV); lv_obj_add_flag(ui->screen_btn_CC, LV_OBJ_FLAG_CLICKABLE); lv_obj_add_flag(ui->screen_btn_CV, LV_OBJ_FLAG_CLICKABLE); lv_obj_set_style_bg_color(ui->screen_btn_CC, lv_color_hex(0x007ACC), LV_PART_MAIN | LV_STATE_FOCUSED); // 按钮聚焦样式 lv_obj_set_style_bg_color(ui->screen_btn_CV, lv_color_hex(0x007ACC), LV_PART_MAIN | LV_STATE_FOCUSED); // 绑定事件到容器和按钮 lv_obj_add_event_cb(ui->screen_btn_CC, encoder_key_handler, LV_EVENT_KEY, NULL); lv_obj_add_event_cb(ui->screen_btn_CV, encoder_key_handler, LV_EVENT_KEY, NULL); lv_group_focus_obj(ui->screen_btn_CC); // 手动设置焦点 printf("%d",lv_obj_has_state(ui->screen_btn_CC, LV_STATE_FOCUSED)); } static void encoder_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) { data->enc_diff = encoder_diff; data->state = encoder_state; if((key_steady == 0) &&(encoder_click == 1)){ encoder_click = 0; data->state = LV_INDEV_STATE_PRESSED; // 中键按下为0 data->key = LV_KEY_ENTER ; printf("LV_KEY_ENTER \r\n"); } else if((key_steady == 1) &&(encoder_click == 0)){ encoder_click = 1; data->state = LV_INDEV_STATE_RELEASED; // 没有键被按下 data->key = LV_KEY_ESC; // 默认返回 ESC 键(可选) printf("LV_KEY_ESC \r\n"); } // 2. 处理旋转(仅在无按键操作时生效) else if (encoder_diff != 0) { data->enc_diff = encoder_diff; data->key = (encoder_diff > 0) ? LV_KEY_RIGHT : LV_KEY_LEFT; data->state = LV_INDEV_STATE_RELEASED; printf("encoder_read state=%d, key = %d\r\n", data->state, data->key); } encoder_diff = 0; // 清零旋转差值 }  

  • 2025-03-14
  • 回复了主题帖: STM32H743 利用定时器DMA触发SPI发送和 接收数据,发现接收的数据,前面5个都不变化

    damiaa 发表于 2025-3-14 09:38 变量访问前最好初始化一下。 不太理解,初始化只是给到了一个固定值,如果我不需要初始化值的话,应该意义也不大吧。   另外刚刚测试了一下,这个0X240049AC 这个地址的变量,如果我在程序里面 去写了自加一 的变量操作,是能正常动的  

  • 回复了主题帖: STM32H743 利用定时器DMA触发SPI发送和 接收数据,发现接收的数据,前面5个都不变化

    damiaa 发表于 2025-3-13 20:10 是不是数组越界了?   1,对调一下这两个数组的定义位置。这样也许就DAMRxBuf变化,SPI1DMARxB ... 嗯,我试过,如果把下面那个变量,放在上面,就是说 0X240049AC这个地址的变量名就是SPI1DMARxBuf 了, 那这个变量的前5个地址也不会变化。   而且,变量我申请了32个,我设置搬移的长度是14个,都不至于会溢出越界。 另外一个就是,如果我在定义的时候,初始化为0,其地址就变化了,  赋值也就都正常了  

  • 2025-03-13
  • 发表了主题帖: STM32H743 利用定时器DMA触发SPI发送和 接收数据,发现接收的数据,前面5个都不变化

    STM32H743  利用定时器DMA触发SPI发送和 接收数据,发现接收的前面5个都不变化, SPI的芯片是一个ADC芯片,触发后,直接可以从MISO上获取到数据。 初始化程序,CH2 是 RX, CH4是TX,定义了两个buf       现象就是,我使用0X240049AC这个地址的变量,前面5个数据,就不会变化,只会变化后面的。     而我如果使用 SPI1DMARxBuf ,地址是 0X24004A2C ,则发现,数据读写就正常。   优化等级,设置的是LEVEL 0,   ICACHE 和 DCHACHE 都是enable的; 对于这个现象,百思不得其解,求助大佬指点  

最近访客

< 1/2 >

统计信息

已有26人来访过

  • 芯积分:462
  • 好友:5
  • 主题:40
  • 回复:356

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言