这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【DIY手势翻页笔】基于STM32H5的手势PPT和LED RGB氛围灯控制系统

共2条 1/1 1 跳转至

【DIY手势翻页笔】基于STM32H5的手势PPT和LED RGB氛围灯控制系统

高工
2024-06-20 18:58:38     打赏

   STM32H5系列微控制器是意法半导体公司推出的一款高性能MCU, CortexM33内核的微控制器产品。 他和STM32F2、F4、F7、H7同属于高端系列产品线。同时他的主频能够达到250MHz。STM32H5相较于STM32F4在多个方面都有显著的优势,这些优势主要体现在性能、安全性、功耗优化以及集成度等方面:

  1. 性能提升

    • STM32H5搭载Cortex-M33内核,运行频率高达250 MHz,相较于STM32F4,提供了更强的计算能力。

    • STM32H5在访问周期等待设置同样为0ws的情况下,系统主频能达到42MHz,而在5ws情况下,系统主频能达到250MHz,远高于STM32F4的30MHz和180MHz。

    • STM32H5引入了I-Cache(指令缓存)和D-Cache(数据缓存)这两个重要特性,进一步提升了系统的运行效率。

  2. 安全性

    • STM32H5提供可扩展的安全产品来满足各种需求,包括物联网设备的安全要求。

    • STM32H5配备了Cortex-M33内核与TrustZone技术,提供更强大的安全保障。

    • STM32H5支持调试认证(Debug Authentication)功能,增加了调试的安全性。

  3. 功耗优化

    • STM32H5利用40nm工艺优化动态功耗,使得动态功耗得到降低。

    • STM32H5的静态功耗也得到优化,进一步节省了能源消耗。

  4. 集成度与性价比

    • STM32H5在双组存储器中提供高达2 MB的闪存、高达640 KB的SRAM和高外设集成度,为开发人员提供了设计自由。

    • STM32H5的芯片设计更加紧凑,提高了性价比。

    • STM32H5基于优化的40 nm工艺技术,提供了多种存储器、外设和封装选项。

综上所述,STM32H5相较于STM32F4在性能、安全性、功耗优化以及集成度等方面都有显著的优势,这些优势使得STM32H5成为了一款集性能、新特性、功耗优化和安全功能于一体的高性能MCU,为开发者提供了更出色的开发体验和性能表现。


A.jpg

B.jpg

E.jpg

STM32通过USB协议模拟键盘控制PPT翻页

1. 概述

  • 目标:使用STM32微控制器通过USB协议模拟键盘操作,实现PPT翻页功能。

  • 技术栈:利用STM32的USB HID(Human Interface Device)功能,模拟键盘按键信号。

2. 开发环境

  • IDE:MDK5.39(或其他支持STM32的IDE)。

  • 配置工具:STM32CubeMX 6.11.0(用于初始化配置和生成代码)。

3. 硬件准备

  • STM32微控制器:选择支持USB HID的STM32型号,本次选择STM32H503。

  • 外部硬件:手势识别模块(PAJ7620U2)。

4. 开发步骤

  1. STM32CubeMX配置

    • 选择STM32H503型号作为目标芯片。

    • 配置RCC时钟、Debug设置和USB HID参数。

    • 启用USB Device_Only模式,并配置相应的USB GPIO引脚(如PA11、PA11)。

    • 配置相应的I2C1 GPIO引脚 PB6 PB7

    • 配置打印 USAT3:PA4 PA5

    • 配置THREADX 实时操作系统(RTOS),USB HID(Human Interface Device)是一种USB通信协议,用于计算机与外部设备之间的交互,特别是用于控制输入设备如键盘、鼠标等。当THREADX系统与USB HID结合使用时,在嵌入式系统中实现与USB HID设备的通信。设备枚举与识别:THREADX系统可以通过USB HID协议识别连接到系统的USB HID设备,数据传输:USB HID设备通过中断管道向主机发送输入数据,THREADX系统可以接收并处理这些数据。设备控制:THREADX系统可以通过USB HID协议向USB HID设备发送输出数据,实现对设备的控制。

    • 应用层代码编写

    • 根据STM32CubeMX生成的代码框架,编写应用层代码。

    • 实现USB HID的初始化和配置。

    • 编写模拟键盘按键的函数,如Page Up、Page Down等。

      00.jpg

      01.jpg

      02.jpg

  2. 触发翻页操作

    • 确保对USB HID协议有深入的理解,以便正确配置和模拟键盘按键。,编写代码以检测输入信号(如手势识别、按钮按下等)。

    • 当检测到翻页信号时,调用模拟键盘按键的函数。

    A11.jpg

  3. 代码调试

    • 在开发环境中进行代码编译和调试。

    • 将编译后的程序烧录到STM32微控制器中。

    • 连接STM32到PC,并在PPT中测试翻页功能。


    • //检测手势并输出
      uint16_t ReadGesture(void)
      {	
      	uint8_t Data[2]={0,0};
      	uint16_t Gesture_Data;
      	HAL_I2C_Mem_Read(&hi2c1, PAJ7620_I2C_ADDRESS, PAJ_INT_FLAG1, I2C_MEMADD_SIZE_8BIT, &Data[0], 1, 500);
      	HAL_Delay(5);
       
      	HAL_I2C_Mem_Read(&hi2c1, PAJ7620_I2C_ADDRESS, PAJ_INT_FLAG2, I2C_MEMADD_SIZE_8BIT, &Data[1], 1, 500);
      	HAL_Delay(5);
       
      	Gesture_Data = (Data[1]<<8) | Data[0];
      	//printf("\n %x \r\n", Gesture_Data);
      	
      	if(Gesture_Data != 0)
      	{
      		//printf("\n %x \r\n", Gesture_Data);
      		switch(Gesture_Data)
      		{
      			case PAJ_UP:			  			  printf("Up\r\n");							return PAJ_UP;								break;
      			case PAJ_DOWN:							printf("Down\r\n");						return PAJ_DOWN;							break;
      			case PAJ_LEFT:							printf("Left\r\n");						return PAJ_LEFT;							break;
      			case PAJ_RIGHT:							printf("Right\r\n"); 					return PAJ_RIGHT;							break;
      			case PAJ_FORWARD:						printf("Forward\r\n");				return PAJ_FORWARD;						break;
      			case PAJ_BACKWARD:					printf("Backward\r\n");				return PAJ_BACKWARD;					break;
      			case PAJ_CLOCKWISE:					printf("Clockwise\r\n");			return PAJ_CLOCKWISE;					break;
      			case PAJ_ANTI_CLOCKWISE:		printf("AntiClockwise\r\n");	return PAJ_ANTI_CLOCKWISE;		break;
      			case PAJ_WAVE:							printf("Wave\r\n"); 					return PAJ_WAVE;							break;
      			default: break;
      		}
      		Gesture_Data = 0;
      	}
      	return 0;
      }
    • UINT App_ThreadX_Init(VOID *memory_ptr)
      {
        UINT ret = TX_SUCCESS;
        TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;
      
        /* USER CODE BEGIN App_ThreadX_MEM_POOL */
      
        /* USER CODE END App_ThreadX_MEM_POOL */
        CHAR *pointer;
      
        /* Allocate the stack for tx app thread  */
        if (tx_byte_allocate(byte_pool, (VOID**) &pointer,
                             TX_APP_STACK_SIZE, TX_NO_WAIT) != TX_SUCCESS)
        {
          return TX_POOL_ERROR;
        }
        /* Create tx app thread.  */
        if (tx_thread_create(&tx_app_thread, "tx app thread", tx_app_thread_entry, 0, pointer,
                             TX_APP_STACK_SIZE, TX_APP_THREAD_PRIO, TX_APP_THREAD_PREEMPTION_THRESHOLD,
                             TX_APP_THREAD_TIME_SLICE, TX_APP_THREAD_AUTO_START) != TX_SUCCESS)
        {
          return TX_THREAD_ERROR;
        }
      
        /* USER CODE BEGIN App_ThreadX_Init */
        /* USER CODE END App_ThreadX_Init */
      
        return ret;
      }
      /**
        * @brief  Function implementing the tx_app_thread_entry thread.
        * @param  thread_input: Hardcoded to 0.
        * @retval None
        */
      void tx_app_thread_entry(ULONG thread_input)
      {
        /* USER CODE BEGIN tx_app_thread_entry */
      
        /* USER CODE END tx_app_thread_entry */
      }
      
        /**
        * @brief  Function that implements the kernel's initialization.
        * @param  None
        * @retval None
        */
      void MX_ThreadX_Init(void)
      {
        /* USER CODE BEGIN  Before_Kernel_Start */
      
        /* USER CODE END  Before_Kernel_Start */
      
        tx_kernel_enter();
      
        /* USER CODE BEGIN  Kernel_Start_Error */
      
        /* USER CODE END  Kernel_Start_Error */
      }
      
      /* USER CODE BEGIN 1 */
      
      /* USER CODE END 1 */


    • 项目升级篇:

      氛围灯:选择RGB LED灯珠组成的氛围灯,支持多种颜色和亮度调节。STM3H5用于接收手势识别模块的信号并控制氛围灯。项目展示如下:

      8888.jpg

      视频展示:

      https://v.youku.com/v_show/id_XNjM5OTg0MzY4NA==.html





工程师
2024-06-23 06:43:09     打赏
2楼

感谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]