嵌入式——基于HAL库和中断的LED流水灯

 一、开发环境搭建

1.安装jdk

以下是jdk的下载链接

Java Downloads | Oracle

2.安装stm32CubeMX

stm32CubeMX的下载地址

https://www.st.com/en/development-tools/stm32cubemx.html

下载后一直点击next即可完成安装

二、利用HAL库完成led灯的相关实验

1.stm32CubeMX新建工程

a.打开stm32CubeMX,点击:“ACCESS TO MCU SELECTOR”

b.选择你所需要使用单片机型号并创建项目

c.如图,完成以下项目的配置

d.此时,可能会遇到未创建邮箱的问题

根据指引创建好后,完成工程的创建

2.keil编写相关的运行代码

在main函数上方写入中断函数

    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
      if(GPIO_Pin == SWITCH_Pin){
        //获取B5的电位
        GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);

        //低电位
        if(pinState==GPIO_PIN_RESET)
        HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_RESET);//把A4变为低电位
        //高电位
        else
            HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_SET);//把A4变为高电位
        }
    }

烧录后结果演示如下

三、Proteus仿真演示

1.新建工程,并按以下配置

2.进行仿真测试

a.右键单片机,选择对应的stm32CubeMX文件

b.配置供电网

c.点击左下角开始运行

d.示波器波形如下

### 嵌入式系统 HAL 视频播放界面 实现方法 在嵌入式系统中实现视频播放界面涉及多个方面的工作,包括硬件准备、软件框架搭建以及具体的功能实现。以下是详细的说明: #### 硬件准备 为了支持视频播放功能,需要确保所使用的微控制器具备足够的处理能力外设接口来驱动显示屏解码视频流。对于STM32系列来说,某些型号可能自带LCD控制器可以直接控制TFT屏幕,而对于其他不具备此特性的MCU,则需额外增加专用的图形加速芯片或SPI/IIC接口连接外部显示器。 针对具体的开发板如stm32F103,在其基础上扩展适合显示图像/视频的小型液晶屏,并通过相应的通信协议(比如SPI)与其相连[^1]。 #### 软件框架搭建 利用STM32CubeMX工具创建新的工程项目时可以选择启用必要的中间件组件,例如FreeRTOS用于任务调度管理;FatFs负责文件系统的操作以便读取存储卡中的媒体资源;GUI(如TouchGFX 或 uGFX)构建用户交互界面。同时也要集成好HAL以简化底层寄存器级编程难度并提高代码可移植性[^3]。 #### 功能实现要点 - **初始化**:完成基本的系统启动流程之后,要先对涉及到的所有外围设备进行初始化设置,这其中包括但不限于定时器、DMA传输通道、I/O口配置等。 - **视频解码与渲染**:选择合适的开源多媒体框架(如FFmpeg),将其移植到目标平台上运行。该部分工作主要是解析输入源的数据包结构,提取音轨视轨信息后交给对应的解码引擎处理成原始帧数据再送至GPU/DMA单元做最终呈现前的最后一轮优化加工[^5]。 - **事件响应机制**:考虑到实际应用场景下可能存在多种触发条件改变当前播放状态的需求,所以应该建立一套完善的中断服务程序用来监听来自物理按钮或者其他传感器传来的信号变化情况从而做出即时反馈调整动作序列执行逻辑走向。 ```cpp // 示例代码片段展示如何注册按键中断回调函数 void MX_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStruct = {0}; /* Configure the button pin as input */ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = BUTTON_PIN; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; // 上升沿下降沿都触发中断 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* Enable and set Button EXTI Interrupt to the lowest priority */ HAL_NVIC_SetPriority(EXTI_LINE_IRQn, 0x0F, 0); HAL_NVIC_EnableIRQ(EXTI_LINE_IRQn); } /* 中断服务例程定义 */ void EXTI_LINE_IRQHandler(void){ if(__HAL_GPIO_EXTI_GET_FLAG(BUTTON_PORT,BUTTON_PIN)!= RESET){ __HAL_GPIO_EXTI_CLEAR_FLAG(BUTTON_PORT,BUTTON_PIN); // 切换LED流水灯的状态 static uint8_t led_state=0; led_state=!led_state; if (led_state==1){ Start_LED_Flow(); // 开始流动效果 }else{ Stop_LED_Flow(); // 结束流动效果 } } } ``` 上述例子展示了如何基于STM32平台使用HAL编写一段简单的按键检测程序,虽然这里仅实现了基础的IO控制而非完整的视频回放特性,但从中可以体会到整个项目的架构思路——即围绕特定需求合理规划软硬件资源配置进而达成预期目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值