这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » DIY手势翻页笔成果贴:1、板载资源的功能实现

共3条 1/1 1 跳转至

DIY手势翻页笔成果贴:1、板载资源的功能实现

高工
2024-05-28 15:55:05     打赏

本次任务主要实现的是各种板载资源外设的初始化和效果展示,其中包括LED控制,串口打印、USB枚举等等,初步规划使用IAR作为首要的开发环境,在Project Manager中进行配置:

20240528 (1).png

先用一个例程试了一下,IAR的工程编译没有问题,可是下载调试一直失败,IAR版本不够,转战STM32CubeIDE。

硬件部分:

LED:板载了一颗绿色的LED,有下图可知控制引脚连接的为PA5,当PA5输出高电平时三极管打开,LED亮,反之LED灭;

20240528 (2).png

按键:按键使用的输入引脚为PC13,也可以通过修改焊接到PA0,当按键按下时输入状态为高,反着为默认状态低;

20240528 (3).png

串口:USART3连接到了调试的虚拟串口上了,所以奔驰串口打印就用它了;

20240528 (4).png

USB:USB的引脚基本上是固定的,本板卡的板载芯片也只有这一路USB;

20240528 (5).png

软件部分:

我们先用STM32CubeMX配置上面的板载资源,并生成初始代码。

20240528 (6).png

根据MCU配置工程,搜索H503RB,选择STM32H503RBT6后生成工程;

20240528 (7).png

首先修改工程配置,项目名、项目路径、开发环境等等,堆栈给大点,毕竟要用到USB;

20240528 (8).png

接下来配置时钟,本开发板板载24Mhz无源晶振,我们选用外部时钟,注意请先在RCC中开启外部时钟;然后通过分频器倍频器使SYSCLK为96Mhz,这是本次我选择的系统时钟。虽然主频最高可以达到250M,不过那么快也没有用;如果有不合适的参数,对应的底色会变成红色,注意修改;

配置PA5为输出控制LED:

20240528 (9).png

接着对输出配置进行修改,初始状态为高电平,推挽输出,默认下拉或者不上拉不下拉都可以,起一个单独的名字为LED:

20240528 (10).png

配置串口3:

20240528 (11).png

配置USB:

20240528 (12).png

根据例程中的设计还需要进行一下两步的设计,启动THREDAX,在USB的使用过程中需要用到这个实时系统:

20240528 (13).png

接下来是USBx,本开发板使用的USB协议是基于USBx进行的,可以直接配置为键盘:

20240528 (14).png

为了测试使用的便捷性,我们引入按键的配置:

20240528 (15).png

注意按键配置为外部中断,上升沿出发,重命名KEY,要开启中断;

接下来就是具体软件的实现了:

        LED的操作基本使用的是如下函数:

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);

        按键中断使用回调函数:

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin == KEY_Pin)
  {/* KEY */
      if(uesr_key == 0)
      {
          uesr_key = 1;
          printf("** LED start blinking ** \n\r");
      }
      else
      {
          uesr_key = 0;
          HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
          printf("** LED stop blinking ** \n\r");
      }
  }
}

        串口配置使用printf(),需要修改如下内容:

#include <stdio.h>
#if defined(__ICCARM__)
__ATTRIBUTES size_t __write(int, const unsigned char *, size_t);
#endif /* __ICCARM__ */

#if defined(__ICCARM__)
/* New definition from EWARM V9, compatible with EWARM8 */
int iar_fputc(int ch);
#define PUTCHAR_PROTOTYPE int iar_fputc(int ch)
#elif defined ( __CC_ARM ) || defined(__ARMCC_VERSION)
/* ARM Compiler 5/6*/
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#elif defined(__GNUC__)
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#endif /* __ICCARM__ */

PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART3 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;
}

        注意使用AZURE_RTOS后函数在tx_app_thread_entry(ULONG thread_input)中编写:

void tx_app_thread_entry(ULONG thread_input)
{
  /* USER CODE BEGIN tx_app_thread_entry */
      while(1)
      {
          tx_app_cnt++;
          if(tx_app_cnt>=500)
          {
              tx_app_cnt = 0;
              if(uesr_key == 1)
                  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
          }
          tx_thread_sleep(1);
      }
  /* USER CODE END tx_app_thread_entry */
}

效果如下,同时LED会根据按键的操作进行显示:

20240528 (16).png

        USB的初始化也是在AZURE_RTOS中进行:

static VOID app_ux_device_thread_entry(ULONG thread_input)
{
  /* USER CODE BEGIN app_ux_device_thread_entry */
  TX_PARAMETER_NOT_USED(thread_input);

  MX_USB_PCD_Init();
  /* USER CODE BEGIN USB_Device_Init_PreTreatment_1 */
  HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x00, PCD_SNG_BUF, 0x14);
  HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x80, PCD_SNG_BUF, 0x54);
  HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x81, PCD_SNG_BUF, 0x94);
  HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x01, PCD_SNG_BUF, 0xD4);
  HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x82, PCD_SNG_BUF, 0x114);

  /* USER CODE END USB_Device_Init_PreTreatment_1 */

  /* Initialize and link controller HAL driver */
  ux_dcd_stm32_initialize((ULONG)USB_DRD_FS, (ULONG)&hpcd_USB_DRD_FS);

  /* Start the USB device */
  HAL_PCD_Start(&hpcd_USB_DRD_FS);
  /* USER CODE END app_ux_device_thread_entry */
}

        可以看到枚举成功:

20240528 (17).png

        到这里板载资源的利用基本上都实现了,同时也完成了基本作业以及提高作业的第一部分。




关键词: 手势翻页笔     成果贴    

专家
2024-05-30 08:40:17     打赏
2楼

这个能挂其他usb设备吗?


高工
2024-06-07 06:50:20     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

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