基于HAL库的LED流水灯:

基于HAL库的LED流水灯 使用HAL完成点灯与中断控制比使用标准库要简单,无论是配置管脚还是书写代码,无疑HAL更加方便,且可读性更好,但HAL库的运行速度显然不如标准库,所以在编写高性能程序的时候,标准库是更好的选择。HAL的优点在于易学,易上手,代码的可读性高,缺点在于运行效率比较慢。 阅读详情

基于HAL库的LED流水灯:

一. 了解并掌握STM32中断原理,HAL库函数开发方法。安装 stm32CubeMX,配合Keil,使用HAL库方式完成下列任务:

1、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。

2、用stm32F103核心板的GPIOA端某一管脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED流水灯工作;接低电平时,LED流水灯停止工作。

1、用GPIO端口完成3只LED红绿灯的周期闪烁:

  1. 首先准备好自己工具:
    ——STM32CubeMX
    ——KEIL5
    ——FLYMcu V0.188
    ——STM32F103C8T6开发板
    

    安装STM32CubeMX(第一次下载需要绑定邮箱注册)

  2. 安装HAL库

    在刚才安装好的STMCubeMX中点击HELP->Manage embedded software packages

    选择你的硬件型号(这里我使用的STM32F103C8T6)点击install(安装)

  3. 新建一个项目:

    在partname中选择自己的型号(STM32F103C8T6),并选中点击start project

    首先设置Debug,点击system core,进入SYS,在debug中选择serial wire(SWD调试接口)

    其次在RCC中配置时钟,一共有两个时钟源(HSE(高速外部时钟)和 LSE(低速外部时钟))由于我们要使用GPIO接口,而GPIO接口都在APB2中,而 APB2 总线的时钟源通常可以选择 HSE 或者其他的参数。

    所以我们在时钟架构中选择PLLCLKPLL(Phase-Locked Loop,锁相环)是一种用于生成高稳定性时钟信号的电路。通过选择 PLLCLK 右侧可以启用 PLL,并将其用作系统时钟源的一部分。这样可以提供更高的时钟频率和更精确的时钟控制。

    然后将hes设为“Crystal/Ceramic Resonator” ——意味着你打算使用晶体谐振器/陶瓷谐振器作为 HSE 的时钟源。这些是两种常见的外部时钟振荡器,用于提供稳定和准确的时钟信号。
  4. 接下来选择相应的引脚设置输出寄存器,即Output选项

  5. 最后生成项目,点击project manager,配置好自己的路径和项目名,将IDE改为MDK-ARM

  6. 注意
    在左侧的Code Generator中勾选生成’.c/.h’文件:

    最后点击“GENERATE CODE”即可生成项目,并且在生成完成后点击”open project“。

2、用stm32F103核心板的GPIOA端某一管脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED流水灯工作;接低电平时,LED流水灯停止工作。

一、通过Cube MX进行简单配置:

1、正常打开Cube MX,选择stm32f103c8t6型号:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、配置RCC的High Speed Clock为Crystal/Ceramic Resonator:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
3、配置SYS,Debug为Serial Wire:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4、配置GPIO引脚:
PA1、PA4、PA7、PC13(作为测试引脚)均设为GPIO_Output
PB5设为GPIO_EXTI5

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5、在NVIC中勾选EXTI line:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6、Pinout View展示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意:创建项目时一定勾选生成“.c/.h"文件

二、通过keil5中补足代码:

首先找到生成的项目,并在工程中找到stm32f1xx_it.c这个文件并在此文件中找到:HAL_GPIO_EXTI_IRQHandler这个方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其次可以右键点击:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后需要修改**weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)**这个方法是留给开发者自行定义的,因为__weak修饰符:

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变为高电位  
        }  
    }  
}

注意:如果SWITCH_Pin报错需要在前方加入头文件:#include “gpio.h”,因为这里引用需要定义的引脚。编译成功即可:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终效果:

当B5接入高电平后LED明显变亮。
当B5接低电平后LED直接熄灭。

二. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口流水灯的输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

1、Keil仿真设置:

点击“魔法棒”后在Debug下,勾选Use Simulator、Load Application at Startup、Run to main(),并将Dialog.DLL下改为DARMSTM.DLL,Parameter下改为-pSTM32F103RC:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、使用逻辑分析仪:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打开后,点击左上角:Setup,并新建需要添加的引脚:

输入GPIOx_IDR.y 回车 信号输出类型选择bit
x为选择的GPIO口号
y为选择的引脚号

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后选择左上角RST右侧的按钮分别是开始和停止:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结果并未观察到波形 因为查询串口通信是IO 口复用的,信号在逻辑分析窗口是不能显示出来的(所以看不到波形)。

参考文献:

https://blog.youkuaiyun.com/weixin_56102526/article/details/120877293

stm32外部中断模式控制灯亮灭_stm32编程后怎么停下来_醉意丶千层梦的博客-优快云博客

嵌入式系统第三次实验报告:基于HAL库的LED流水灯 一. 了解并掌握STM32中断原理,HAL库函数开发方法。安装 stm32CubeMX,配合Keil,使用HAL库方式完成下列任务:1、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。2、用stm32F103核心板的GPIOA端某一管脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED流水灯工作;接低电平时,LED流水灯停止工作。 阅读详情

相关推荐

STM32 HAL库LED状态机驱动:模块化封装与状态驱动设计

状态机是嵌入式系统处理时序逻辑的核心范式,其本质是将系统行为解耦为有限状态、明确动作与受控转移。基于HAL库的模块化封装则通过结构体+函数指针实现C语言下的轻量级面向对象,提升代码复用性与硬件可移植性。二者结合,既保障了底层GPIO操作的可靠性,又支撑起流水灯、多模式指示、故障状态反馈等典型应用场景。本文以STM32F1系列为例,详解LED外设驱动的分层设计、状态变量管理、定时器事件协同及volatile安全实践,覆盖从裸机到RTOS演进的关键路径,为工业级状态驱动固件开发提供可落地的技术骨架。

weixin_42466857的博客 773

作业:基于HAL库的LED流水灯

1.安装jdk(有java环境的可以不用这一步)jdk官网下载链接:2.安装STM32CubeMX下载地址:安装过程管理员身份运行 SetupSTM32CubeMX-4.27.0.exe ,点击Next选择"I accept the terms of this license agreement",点Next选择安装位置,默认位置是安装在C盘中点击确定选择Next安装完成后,选择Next点击Done,完成安装!安装固件库。

qq_66199663的博客 153

STM32 GPIO驱动LED流水灯:硬件原理与HAL库实战

GPIO(通用输入输出)是嵌入式系统最基础的外设接口,其核心在于对引脚电平、模式与电气特性的精确控制。理解推挽输出、开漏输出等模式差异,是实现可靠外设驱动的前提;而共阴极/共阳极LED连接方式直接决定了电平逻辑与电流路径。在STM32平台中,GPIO操作依赖时钟使能、端口配置及HAL库抽象,涉及RCC、AFIO、寄存器映射等底层机制。该技术广泛应用于状态指示、人机交互、工业控制等场景,也是RTOS任务调度、低功耗管理与PWM调光的硬件基础。本文以STM32F103C8T6驱动三色LED流水灯为实例,系统解析

weixin_29155599的博客 57

嵌入式作业:基于HAL库和中断的LED流水灯

中断机制如同智能调度员,能实时响应外部事件,使系统更灵活高效实验中,HAL库极大简化了中断配置和编程,如GPIO中断设置和事件处理,使编程过程像搭建积木般简单。HAL库的硬件抽象层优势提高了代码的可移植性,使代码在不同STM32芯片上几乎无需修改即可运行,节省了时间和精力最终,看到LED流水灯根据外部开关状态准确工作,我深感自豪,这不仅验证了电路连通,更是我学习和实践成果的展示。新建工程后,打开我们新建的工程,进入存有中断函数的文件,找到中断函数。进入有中断函数的头文件中,将新编写的函数加进去。

2401_88963122的博客 539

保姆级教程:给你的Jetson Orin NX换个‘大房子’——新SSD初始化与JetPack 6.x刷机全流程

本文提供Jetson Orin NX存储升级与JetPack 6.x系统部署的完整指南,涵盖SSD选型、分区策略、刷机流程及性能优化技巧。通过实测数据展示如何提升AI模型加载速度33%,并分享温度管理、I/O调度等实战经验,助力开发者突破边缘计算存储瓶颈。

weixin_42715608的博客 157

MIPI DPHY接口(基于Xilinx FPGA实现)案例分析

在Xilinx FPGA实现MIPI DPHY接口的案例(包括CIS协议层)。截止目前为止,Xilinx仅在Ultrascale+及其以上版本的FPGA IO可直接支持MIPI 电平输入,其他的,都需要转换成LVDS来接收。

ONEFPGA的博客 5626

嵌入式:使用CubeMX和HAL库点亮LED流水灯

目录前言一、使用CubeMX生成代码点亮LED灯1.使用CubeMX生成代码2.生成芯片可执行的hex文件3.程序运行:亮灯二、示波器显示看波形确定代码正误三、总结 前言 本文是嵌入式菜鸡做点小实验来熟悉CubeMX、HAL库的简单实验报告。 一、使用CubeMX生成代码点亮LED灯 1.使用CubeMX生成代码 打开CubeMX,点击ACCESS TO MCU SELECTOR创建新项目 在Part Number处选择芯片,这里以STM32F103C8T6为例,然后在中间会出现一列芯片的信息,点击之后再

LaiYiFei25的博客 1881

直流电源EMI滤波器设计实战:从器件选型到PCB布局的完整指南

本文提供了一份直流电源EMI滤波器的完整实战设计指南。针对EMI噪声超标问题,文章深入剖析了差模与共模噪声的抑制原理,详细讲解了从电路拓扑、核心器件(如X/Y电容、共模电感)的选型计算,到决定性能成败的PCB布局艺术。重点强调了低阻抗路径、干净接地及输入输出隔离等关键布局原则,并分享了常见的调试坑点与排查方法,旨在帮助硬件工程师设计出真正有效的滤波器,确保电源系统通过EMC测试。

q9r0s的博客 641

STM32 HAL库手动移植:从零构建LED流水灯工程

HAL库是STM32嵌入式开发中实现硬件抽象与跨平台兼容的核心软件框架,其本质是通过C语言封装寄存器操作,提供统一的外设驱动API。理解HAL库的组织结构(CMSIS层、HAL_Driver层、BSP层)和初始化流程(时钟配置、GPIO初始化、SysTick使能),是掌握裸机开发原理的关键技术基础。它不仅支撑LED控制、串口通信等基础外设应用,更构成FreeRTOS移植、USB协议栈集成及低功耗系统设计的前提。本文以STM32F103为平台,聚焦HAL库手动移植实践,详解启动文件配置、头文件路径管理、预处理

weixin_42600407的博客 274

AAC编解码器在实时通信中的性能对比与应用选择

本文深入分析了AAC编解码器在实时通信中的性能优化,重点对比了faac、faad2与fdk-aac三大开源方案在WebRTC场景下的表现。通过实测数据揭示其在延迟、音质和资源消耗等关键指标的差异,并提供场景化选型建议与调优技巧,帮助开发者提升实时音视频通信质量。

weixin_29210727的博客 389

Apache-Plc4x-Modbus-Tcp学习记录(一)

Apache-Plc4x-Modbus-Tcp学习记录(一)

weixin_45325423的博客 6988

从环境搭建到仿真验证:手把手教你用 HAL 库做 STM32 LED 流水灯

本文介绍了基于HAL库和中断实现STM32流水灯的全过程。首先详细说明了JDK环境和CubeMX软件的安装步骤,包括版本选择和配置参数。然后重点讲解了CubeMX的配置流程:安装HAL库、创建工程、设置时钟和GPIO引脚,并生成了流水灯控制代码。最后展示了电路连接烧录效果和仿真波形,验证了流水灯每隔1秒轮换闪烁的功能。文章通过图文结合的方式,完整呈现了从环境搭建到功能实现的全过程,为STM32中断控制LED提供了实用参考。

2401_89145131的博客 917

接口操作MySQL跟MongoDB事务回滚问题

通常使用的事务注解:@Transactional 是不会对MongoDB生效的,但是在一些生产接口中无法避免同时使用MySQL跟MongoDB的操作。

weixin_45932023的博客 1578

STM32实战:基于STM32CubeMX的HAL库LED流水灯与按键中断

本文介绍了基于STM32F103C8T6微控制器的嵌入式开发实战教程。主要内容包括:1) 使用STM32CubeMX配置GPIO实现LED流水灯;2) 配置外部中断实现按键检测;3) 讲解HAL库工作原理和编程模型。详细说明了硬件准备、软件环境搭建(STM32CubeMX和STM32CubeIDE)、工程创建与配置(时钟树、GPIO、NVIC中断)等步骤,并提供了核心代码实现框架。通过本教程,开发者可掌握STM32基本开发流程、HAL库使用方法和调试技巧,为嵌入式开发奠定基础。

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 609

Fluent 中多相流模型全面解析

3.颗粒或液滴在连续相中的运动:若关注颗粒或液滴在连续相中的运动轨迹、分布规律以及与连续相的相互作用,如喷雾干燥、气力输送等过程,Eulerian-Lagrangian 模型则是最佳选择。Eulerian-Eulerian 模型可以准确模拟气体在固体颗粒中的流动情况,包括颗粒的流化状态、气体与颗粒之间的传热传质过程,为气固流化床的优化设计和操作提供依据。通过该模型,可以了解混合器内不同位置的混合程度、颗粒的运动轨迹以及液固相间的相互作用,从而改进混合器的结构和操作条件,提高混合效率。

khhdp的博客 3086

在 ABAP Cloud 里优雅地调用 HTTP 服务:新一代 HTTP Client 全面实践与落地指南

摘要: 随着ABAP Cloud时代的到来,HTTP通信在SAP系统集成中的角色日益重要。传统CL_HTTP_CLIENT存在维护成本高、边界模糊等问题,而新一代ABAP HTTP Client采用Destination驱动的调用方式,通过CL_HTTP_DESTINATION_PROVIDER支持四种创建方式(URL、通信安排、BTP Destination服务、SM59连接)。该模型将连接配置与业务逻辑分离,使URL、认证等参数可集中管理。典型调用流程包括:基于Destination创建Client,设

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

第四周--用寄存器&amp:HAL库完成LED流水灯的程序

用寄存器&HAL库完成流水灯

m0_65889648的博客 330

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

基于STM32实验:了解并利用STM32寄存器和HAL库完成LED流水灯实践练习

本文较为全面的学习了STM32寄存器映射的原理以及对GPIO初始化的过程,同时也了解了STM32的总线框架。最后利用了一道流水灯实践练习题巩固了控制GPIO输出初始化的步骤,还利用了HAL库,直观地对GPIO输出进行初始化操作,最终在Keil软件上,对流水灯输出地的三个引脚进行了仿真,利用虚拟逻辑分析仪观察到了三个引脚的输出波形,验证了程序的可行性。

zpz84761695的博客 1490

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

保姆级!STM32 中断控制 LED 流水灯全流程:CubeMX 配置 + HAL 库编程 + 问题解决

本文介绍了基于STM32 HAL库实现中断控制LED流水灯的完整过程。首先通过STM32CubeMX配置GPIO引脚(PA0-PA2为输出,PB5为外部中断源),设置时钟和中断优先级。然后编写中断回调函数,通过检测PB5电平状态控制LED流水灯启停。实验实现了PB5高电平时三颗LED依次点亮(0.1s间隔),低电平时全部熄灭的效果。文章详细记录了CubeMX配置步骤、代码编写要点、电路连接方式及Protues仿真结果,并分享了调试心得和Git代码仓库。该实验验证了HAL库中断机制的可靠性,为STM32中断应

2401_89145131的博客 1283

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

寄存器 vs HAL库:用STM32F103C8T6驱动LED流水灯的两种实现方式对比

本文对比了STM32F103C8T6驱动LED流水灯的两种实现方式:寄存器操作与HAL库开发。通过硬件搭建、代码实现和性能对比,详细分析了两种方法的优劣势,为嵌入式开发者提供了技术选型指南。特别适合需要在开发效率和执行性能之间取得平衡的STM32项目。

weixin_28285943的博客 321

STM32:(入门)基于HAL库与STM32CubeMX的LED流水灯实战

本文详细介绍了基于STM32CubeMX和HAL库实现STM32 LED流水灯的完整实战教程。从环境搭建、GPIO配置、时钟树设置到代码编写与调试,逐步指导初学者掌握STM32开发基础,特别适合嵌入式开发入门学习。

xx56789的博客 175

Keil+STM32F103C8T6实战:用HAL库实现LED灯多种特效(呼吸灯+流水灯)

本文详细介绍了如何在Keil开发环境下,使用STM32F103C8T6微控制器和HAL库实现LED灯的两种经典特效:呼吸灯与流水灯。通过硬件PWM精准控制亮度实现呼吸效果,并利用定时器中断高效管理多LED流水序列,提供了从CubeMX工程配置到核心代码编写的完整开发教程,帮助开发者深入理解STM32的定时器与中断机制。

ik678901的博客 814

STM32 HAL库LED移植与BSP硬件抽象层设计

硬件抽象层(BSP)是嵌入式系统实现软硬解耦与跨平台复用的核心机制,其本质是通过宏定义、枚举类型和分层接口将物理引脚、时钟配置等硬件细节封装为逻辑设备。基于STM32 HAL库的BSP设计遵循‘一个外设、一对文件’原则,利用GPIO推挽输出模式驱动共阳极LED,并结合断言(assert_param)实现运行期参数校验,显著提升代码健壮性。该方案广泛应用于STM32F1系列开发板(如硬石F1)的工程移植、流水灯控制、外设快速适配等典型场景,为初学者掌握寄存器级原理与工业级代码架构提供扎实实践路径。

weixin_42594427的博客 961

STM32G431RBT6实战:CubeMX配置与LED流水灯开发全解析

本文详细解析了使用STM32CubeMX配置STM32G431RBT6开发环境并实现LED流水灯的完整流程。从工程创建、时钟配置、GPIO设置到代码编写与调试,提供了实战指南,帮助开发者快速掌握基于HAL库的嵌入式开发技术,并解决常见问题。

l3m4n的博客 710

STM32F103的LED流水灯(跑马灯)实现的完整代码

本文提供了STM32F103实现LED流水灯的完整代码,包含三种实现方式:1)标准库实现(推荐学习用),包含LED初始化、顺序流水灯、累积流水灯和呼吸灯效果;2)硬件连接使用PB0-PB7连接8个LED;3)代码详细注释了GPIO配置、延时函数实现和各种流水灯模式切换。文中还提供了delay.c延时函数的实现细节,使用SysTick实现精确延时,支持微秒和毫秒级延时控制。

shufawangzhang的博客 797
上一篇: 基于寄存器&标准外设库的LED流水灯
下一篇: 一. 在线Verilog编程网站学习:
whynotsolve
博客等级 码龄4年 202粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值