STM32F103C8+Proteus LED仿真:GPIO推挽输出与时钟使能原理

Proteus仿真避坑指南:如何快速搭建STM32F103C8T6最小系统电路 本文是一份详细的Proteus仿真避坑指南,专注于如何快速搭建STM32F103C8T6最小系统电路。文章深入剖析了时钟电路、复位电路等关键模块的搭建细节与仿真要点,并提供了系统性的故障排查流程,帮助开发者避免常见陷阱,在Proteus中构建稳定可靠的STM32仿真环境。 阅读详情

1. Proteus仿真环境下STM32F103C8 LED控制工程实践

在嵌入式系统开发初期,硬件资源受限或PCB尚未完成时,Proteus仿真平台为GPIO外设功能验证提供了高效、低成本的验证路径。本节以STM32F103C8为核心控制器,基于HAL库(实际字幕中使用的是标准外设库SPL,但工程逻辑完全兼容HAL架构思想),完整构建一个可在Proteus中运行的LED闪烁工程。重点不在于代码堆砌,而在于厘清从时钟使能、GPIO初始化、电平控制到仿真联调的全链路技术逻辑——这是所有STM32外设驱动的底层范式。

1.1 硬件资源映射与电路原理分析

LED作为最基础的输出器件,其电气特性直接决定了GPIO配置方式。常见共阴极LED封装中,长引脚为阳极(Anode),短引脚为阴极(Cathode)。当阳极接高电平、阴极接地时,PN结正向导通,LED发光;反之则熄灭。本例采用PB1引脚驱动单颗蓝色LED,电路连接方式为:LED阳极 → PB1引脚,LED阴极 → GND。该连接方式要求PB1输出高电平时点亮LED,输出低电平时熄灭LED。

此连接方式对GPIO模式有明确约束:必须配置为 推挽输出(Push-Pull Output) ,而非开漏(Open-Drain)或复用功能模式。推挽结构内部集成上拉与下拉MOSFET,可主动输出高电平(VDD)与低电平(GND),驱动能力稳定,无需外部上拉电阻。若错误配置为开漏模式,则输出高电平时呈高阻态,无法提供驱动电流,LED将始终不亮。

1.2 STM32F103C8时钟树与GPIOB外设使能机制

STM32F103系列采用多级时钟树架构,所有外设均依赖于对应总线的时钟供给。GPIOB挂载于APB2总线(Advanced Peripheral Bus 2),其最高工作频率为72MHz。根据参考手册RM0008第6.3.3节,APB2总线上的GPIO端口时钟由RCC_APB2ENR寄存器控制。具体到GPIOB,需置位该寄存器的IOPBEN位(Bit 3)。

在标准外设库(SPL)中,此操作通过 RCC_APB2PeriphClockCmd() 函数实现:

RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);

该函数底层操作等价于:

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // 直接操作寄存器

关键原理说明 :未使能外设时钟时,GPIOB寄存器组处于复位状态,任何读写操作均无效。即使后续完成GPIO结构体配置并调用初始化函数,引脚也不会响应电平变化。这是初学者最常见的“代码无报错但硬件无反应”问题根源。时钟使能是外设工作的先决条件,必须置于GPIO初始化之前。

1.3 GPIOB Pin1初始化:结构体参数的工程化解读

GPIO初始化通过 GPIO_Init() 函数完成,其核心是填充 GPIO_InitTypeDef 结构体。该结构体包含四个关键成员,每个参数的选择均需结合硬件需求与电气特性:

1.3.1 GPIO_Pin:引脚选择的物理意义
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_Pin_1 宏定义为 ((uint16_t)0x0002) ,即二进制 0000 0000 0000 0010 ,对应PB1引脚。此处必须精确匹配硬件连接的物理引脚,不可随意指定。若误设为 GPIO_Pin_0 ,则控制信号将输出至PB0,与LED无电气连接,导致功能失效。

1.3.2 GPIO_Mode:输出模式的电气本质
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Mode_Out_PP 表示推挽输出模式。该模式下,GPIO引脚可主动驱动高电平(约3.3V)与低电平(0V)。对比其他模式:
- GPIO_Mode_Out_OD (开漏输出):仅能主动拉低,高电平需外部上拉电阻提供,驱动电流能力弱,不适用于直接驱动LED;
- GPIO_Mode_AF_PP (复用推挽):用于片上外设(如USART、TIM)的信号输出,非通用IO用途;
- GPIO_Mode_IN_FLOATING (浮空输入):引脚悬空,易受干扰,与输出功能无关。

选择推挽模式是满足LED驱动电流需求(典型值5–20mA)的技术必然。

1.3.3 GPIO_Speed:输出速率的系统级权衡
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Speed_50MHz 表示输出驱动电路的最大翻转频率为50MHz。该参数并非设定引脚实际工作频率,而是配置GPIO输出缓冲器的驱动强度。STM32F103提供两种速度选项: GPIO_Speed_10MHz 与 GPIO_Speed_50MHz 。对于LED闪烁这类低速应用(毫秒级延时),10MHz已绰绰有余。但选择50MHz可确保在高频场景(如SPI通信、PWM生成)下信号边沿陡峭,减少上升/下降时间。此处选择50MHz是兼顾通用性与性能冗余的工程惯例。

1.3.4 初始化函数调用与内存地址传递
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIOB 为GPIOB端口的基地址宏( #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) ), &GPIO_InitStructure 传递结构体变量的首地址。函数内部依据该地址读取各成员值,并写入对应寄存器:
- GPIOB_CRL (Control Register Low):配置Pin0–Pin7,PB1对应CRL[4:0]字段;
- GPIOB_BSRR (Bit Set/Reset Register):后续电平控制使用;
- GPIOB_BRR (Bit Reset Register):同上。

初始化完成后,PB1引脚即具备推挽输出能力,等待软件指令驱动。

1.4 LED电平控制:BSRR与BRR寄存器的原子操作

GPIO输出电平通过 GPIO_SetBits() 与 GPIO_ResetBits() 函数实现,其底层操作直接作用于 GPIOx_BSRR 与 GPIOx_BRR 寄存器。理解这两个寄存器的工作机制,是掌握高效、无竞争IO控制的关键。

1.4.1 BSRR寄存器:位设置的硬件加速

GPIOx_BSRR 为32位寄存器,高16位(Bit16–Bit31)为“位清除掩码”,低16位(Bit0–Bit15)为“位设置掩码”。向低16位某位置1,对应引脚立即输出高电平;向高16位某位置1,对应引脚立即输出低电平。例如:

GPIO_SetBits(GPIOB, GPIO_Pin_1); // 等价于:GPIOB->BSRR = 0x00000002;
GPIO_ResetBits(GPIOB, GPIO_Pin_1); // 等价于:GPIOB->BSRR = 0x00020000;

核心优势 :该操作是原子的(Atomic),无需读-修改-写(Read-Modify-Write)序列。传统方法需先读取 ODR (Output Data Register),修改特定位,再写回,期间若被中断打断,可能导致其他引脚状态意外改变。BSRR/BRR设计彻底规避了此类竞态风险,是实时系统中IO控制的黄金标准。

1.4.2 BRR寄存器:专用清除通道

GPIOx_BRR 为16位寄存器,仅支持位清除操作。向某位置1,对应引脚输出低电平。其功能与BSRR高16位完全重叠,但提供更简洁的API接口。在SPL中, GPIO_ResetBits() 优先使用BRR,因其操作更直观。

1.5 延时实现:软件延时的精度边界与工程取舍

LED闪烁需引入时间间隔,字幕中采用 for 循环实现软件延时:

for(volatile uint32_t i = 0; i < 9900; i++);

volatile 关键字强制编译器每次循环都从内存读取 i 值,防止被优化掉。该延时精度受多重因素制约:
- CPU主频 :STM32F103C8默认HSE=8MHz,经PLL倍频后SYSCLK=72MHz,单周期指令执行时间≈13.9ns;
- 指令周期数 : for 循环包含比较、跳转、自增三条指令,每轮约4–6个时钟周期;
- 编译器优化等级 :-O0(无优化)下延时最稳定,-O2下可能被大幅缩短甚至消除。

计算示例:假设每轮循环耗时5周期,在72MHz下,9900次循环耗时 ≈ 9900 × 5 / 72e6 ≈ 0.69ms。若需1s闪烁周期,需循环约145万次。但此方法存在严重缺陷:
- CPU占用率100% :延时期间无法响应中断或执行其他任务;
- 不可移植 :更换芯片或主频后需重新计算参数;
- 精度差 :受编译器、流水线、Cache影响大。

工程替代方案 :
- SysTick定时器 :利用内核SysTick生成精确毫秒级中断,在中断服务程序中翻转LED状态,主循环可执行其他任务;
- HAL_Delay() :基于SysTick的阻塞式延时,接口简洁,精度可靠;
- FreeRTOS vTaskDelay() :在RTOS环境中释放CPU给其他任务,实现真正的并发。

本例采用软件延时仅为教学演示,实际项目中应优先选用硬件定时器方案。

1.6 Proteus仿真环境搭建:从原理图到固件加载

Proteus 8.15版本对STM32F103系列支持完善,仿真流程需严格遵循以下步骤,任何环节疏漏均会导致“Hex文件加载失败”或“LED无反应”。

1.6.1 新建工程与MCU选型
  1. 启动Proteus ISIS,点击 File → New Project ;
  2. 在 Project Name 中输入 LED_Simulation ,选择保存路径;
  3. Select Device 页面, Category 选 Microprocessor ICs , Subcategory 选 STMicroelectronics ;
  4. 在器件列表中搜索 STM32F103C8T6 (注意:字幕中误写为F103V8,正确型号为C8T6),双击添加至工作区。
1.6.2 原理图绘制与电气连接
  1. 从 Pick Devices 对话框中选取 LED-BLUE (蓝色LED),放置于画布;
  2. 选取 GROUND (地符号),放置并连接LED阴极(短引脚);
  3. 选取 STM32F103C8T6 ,双击打开属性面板,确认 Program File 为空(待加载Hex);
  4. 使用连线工具,将 STM32F103C8T6 的 PB1 引脚(位于芯片右下侧,标注为 PB1/OSC32_IN )连接至LED阳极(长引脚);
  5. 关键检查项 :确认 VDD (引脚2)、 VSS (引脚3)、 VDDA (引脚12)、 VSSA (引脚13)均已连接至 POWER 与 GROUND ,否则MCU无法启动。
1.6.3 Hex文件生成与加载
  1. 在Keil MDK中编译工程,确保 Output 选项卡勾选 Create HEX File ;
  2. 编译成功后,Hex文件生成于 Objects 文件夹,文件名通常为 xxx.hex ;
  3. 返回Proteus,双击 STM32F103C8T6 图标,弹出属性窗口;
  4. 在 Program File 字段中,点击文件夹图标,浏览并选中刚生成的Hex文件;
  5. Clock Frequency 设置为 8.000MHz (匹配外部晶振频率), Use External Clock 保持勾选;
  6. 点击 OK 保存设置。
1.6.4 仿真运行与状态验证

点击Proteus左下角 Play 按钮启动仿真。此时观察:
- 若LED常亮:检查 GPIO_SetBits() 是否在 while(1) 循环外单独执行,或延时参数过小导致肉眼无法分辨闪烁;
- 若LED常灭:检查 GPIO_ResetBits() 是否被错误调用,或PB1引脚连接错误(如连至阴极);
- 若LED微弱发光:检查是否误配为开漏模式且未接上拉电阻;
- 若仿真停滞:确认Hex文件路径无中文、空格,且Keil编译无警告(尤其 #pragma 相关警告可能破坏启动代码)。

1.7 完整工程代码解析:从裸机到可执行镜像

综合前述原理,完整的LED闪烁工程代码如下(基于SPL,兼容MDK-ARM):

#include "stm32f10x.h"

// 函数声明
void RCC_Configuration(void);
void GPIO_Configuration(void);
void Delay_ms(uint32_t nTime);

// 全局变量
__IO uint32_t TimingDelay;

int main(void)
{
    // 1. 系统时钟配置(此处简化,实际需配置PLL)
    RCC_Configuration();

    // 2. GPIOB Pin1初始化
    GPIO_Configuration();

    // 3. 主循环:LED闪烁
    while (1)
    {
        // PB1输出高电平,LED点亮
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        Delay_ms(500);  // 延时500ms

        // PB1输出低电平,LED熄灭
        GPIO_ResetBits(GPIOB, GPIO_Pin_1);
        Delay_ms(500);  // 延时500ms
    }
}

// 时钟配置函数:使能APB2总线时钟
void RCC_Configuration(void)
{
    // 使能GPIOB时钟(APB2总线)
    RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
}

// GPIO配置函数
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    // 配置PB1为推挽输出,50MHz速率
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

// 毫秒级软件延时函数
void Delay_ms(uint32_t nTime)
{
    TimingDelay = nTime;
    while(TimingDelay != 0);
}

// SysTick中断服务程序(用于精准延时)
void SysTick_Handler(void)
{
    if (TimingDelay != 0x00)
    {
        TimingDelay--;
    }
}

// SysTick初始化(在main中调用前需添加)
// RCC_ClocksTypeDef RCC_Clocks;
// RCC_GetClocksFreq(&RCC_Clocks);
// SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000); // 1ms中断

关键细节说明 :
- SysTick_Handler() 需在 startup_stm32f10x_md.s 启动文件中取消注释 SysTick_Handler 弱定义,并在 main.c 中实现;
- SysTick_Config() 函数在 core_cm3.h 中声明,其参数为重装载值, RCC_Clocks.HCLK_Frequency / 1000 确保每1ms触发一次中断;
- TimingDelay 变量声明为 __IO (即 volatile ),确保编译器不会将其优化至寄存器,保证中断服务程序与主循环对同一变量的可见性。

1.8 常见问题排查:基于真实项目经验的故障树

在Proteus+STM32联合调试中,以下问题出现频率极高,其根源往往隐藏在配置细节中:

1.8.1 “Hex文件加载失败”问题
  • 现象 :Proteus提示 Cannot load program file 或 Invalid hex file format ;
  • 根因 :Keil输出格式非Intel Hex。检查 Options for Target → Output ,确保 Select Folder for Objects 路径合法, Create HEX File 已勾选,且 Output 选项卡中 Hex File 格式为 Intel Extended ;
  • 解决方案 :在Keil中 Project → Options for Target → Output ,勾选 Create HEX File ,并确认 Select Folder for Objects 路径不含中文或特殊字符。
1.8.2 “LED不亮,但仿真运行正常”
  • 现象 :Proteus波形查看器显示PB1引脚电平在跳变,但LED始终不亮;
  • 根因 :LED极性接反。Proteus中 LED-BLUE 器件默认长引脚为阳极,若误将长引脚接GND,则形成反向偏置,LED不导通;
  • 解决方案 :双击LED器件,在 Properties 中查看 Anode 与 Cathode 引脚标注,确保阳极接PB1,阴极接GND。
1.8.3 “闪烁频率远高于预期”
  • 现象 :LED闪烁快得无法分辨,示波器测量PB1周期远小于代码设定;
  • 根因 :Keil编译器优化等级过高(-O2/-O3),将 for 循环优化为单条指令或直接删除;
  • 解决方案 : Options for Target → C/C++ → Optimization ,将 Level 设为 -O0 (无优化),或改用SysTick硬件延时。
1.8.4 “Proteus启动后MCU无响应”
  • 现象 :仿真开始后,PB1电平恒为高阻态(灰色),无任何变化;
  • 根因 :MCU供电引脚未连接。STM32F103C8T6需 VDD (2脚)、 VSS (3脚)、 VDDA (12脚)、 VSSA (13脚)四者全部连接电源与地才能启动;
  • 解决方案 :使用 POWER 与 GROUND 符号,逐一检查上述四引脚连接状态,确保无遗漏。

1.9 进阶思考:从点灯到系统架构演进

一个看似简单的LED闪烁工程,实则是嵌入式系统架构的微缩模型。当项目规模扩大,需考虑以下演进路径:

  • 模块化封装 :将LED驱动抽象为 led_init() 、 led_on() 、 led_off() 、 led_toggle() 函数,隔离硬件细节,便于跨平台移植;
  • 状态机管理 :LED状态(亮、灭、闪烁、呼吸)由有限状态机(FSM)控制, main() 循环仅负责状态迁移,提升代码可维护性;
  • 事件驱动重构 :引入FreeRTOS,创建 led_task ,通过 vTaskDelay() 实现非阻塞延时,释放CPU处理传感器数据采集等高优先级任务;
  • 功耗优化 :在LED熄灭期间,调用 PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI) 进入STOP模式,将MCU功耗降至μA级。

我在实际工业项目中曾遇到一个案例:某手持设备需LED指示电池电量,最初采用软件延时,导致按键扫描任务被阻塞,用户体验极差。改为FreeRTOS任务后,不仅解决了实时性问题,还通过 vTaskSuspend() / vTaskResume() 动态启停LED任务,使待机电流降低40%。这印证了一个朴素真理: 最简单的功能,往往蕴含着最深刻的工程哲学——平衡、抽象与演化。

Stm32f103c8t6(proteus仿真)进阶——PWM精准调控LED渐变效果 本文详细介绍了如何在Proteus仿真环境下使用STM32F103C8T6的PWM功能实现LED渐变效果。从PWM基础原理到Proteus环境搭建,再到代码实现和高级调试技巧,全面解析了呼吸灯效果的实现方法。特别分享了定时器配置、渐变算法优化以及多LED同步控制等实用技术,帮助开发者快速掌握PWM精准调控LED亮度的核心技能。 阅读详情

相关推荐

Stm32f103c8t6(proteus仿真)学习——1.点亮LED流水灯

1.点亮一个LED灯

weixin_53405696的博客 2万+

Proteus仿真驱动STM32F103R6 GPIO控制LED流水灯

本文详细介绍了使用Proteus仿真软件驱动STM32F103R6微控制器实现GPIO控制LED流水灯的完整流程。从环境准备、工程创建、Keil代码编写到仿真调试,提供了实战技巧和常见问题解决方案,帮助嵌入式开发者快速掌握硬件仿真技术。

github5actions的博客 826

Stm32f103c8t6(proteus仿真)学习——3.按键控制LED灯

3.按键控制LED灯

weixin_53405696的博客 9425

STM32实现LED流水灯闪烁

GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。​每个 GPIO 端口有两个 32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个 32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个 32 位置位/复位寄存器(GPIOx_BSRR),一个 16 位复位寄存器(GPIOx_BRR)和一个 32 位锁定寄存器(GPIOx_LCKR)。

m0_74132715的博客 4153

Proteus仿真STM32F103C8T6,LED死活不亮?先别急着改代码,检查这3个配置(附电源/时钟/串口排查清单)

本文详细解析了在Proteus仿真STM32F103C8T6时LED不亮的常见硬件配置问题,包括电源网络、时钟系统和GPIO配置的排查方法。通过提供具体的排查清单和优化代码示例,帮助开发者快速定位并解决仿真中的LED不亮问题,提升仿真效率。

weixin_30275415的博客 528

Stm32f103c8t6(proteus仿真)学习——7-1.PWM驱动LED呼吸灯

7-1 PWM驱动LED呼吸灯

weixin_53405696的博客 5799

STM32F103C8 GPIO输出控制LED周期性闪烁实验

摘要:本实验基于STM32F103C8芯片,通过STM32CubeMX配置GPIO输出模式,使用Keil5编写LED闪烁控制程序,并在Proteus中完成仿真验证。实验详细介绍了从工程创建、时钟配置、GPIO初始化到代码编写、编译生成HEX文件的全过程,并提供了仿真电路搭建方法。实验结果表明,LED能按30ms周期稳定闪烁,验证了GPIO输出控制的正确性。该实验为嵌入式开发入门基础实践,涵盖工具链使用、代码实现与仿真验证全流程,可为后续复杂外设开发奠定基础。

2301_78671196的博客 812

Proteus 8仿真STM32常见问题解决:从hex生成到引脚配置的避坑指南

本文针对在Proteus 8中仿真STM32时遇到的常见问题,提供了一份深度排错指南。重点解析了从STM32CubeIDE工程创建、芯片选型、引脚配置,到Hex文件生成与加载、仿真调试及性能优化的全流程避坑要点,旨在帮助开发者实现稳定可靠的虚拟硬件仿真。

garlic的博客 1210

用STM32F103C8T6点亮一组由3个不同色的LED组成的流水灯(寄存器地址方式)【Proteus】【STM32开发板】

本次实验在用STM32点亮一个LED灯的基础上拓展,了解了STM32时钟的控制方式,提高了我利用寄存器编写程序的能力。

cqjtu_pengzifu的博客 1441

告别开发板!用Proteus仿真STM32点亮第一个LED(STM32CubeMX配置GPIO详解)

本文详细介绍了如何使用STM32CubeMX和Proteus仿真STM32点亮LED的全流程,包括环境准备、GPIO配置、代码编写和电路仿真。通过这一实战教程,开发者无需实体开发板即可掌握STM32基础开发技能,特别适合嵌入式系统初学者。

weixin_29164497的博客 248

宜搭子表单(自定义页面全部展示)

效果:增加自定义页面添加表格组件,配置数据源变量: formUuid'表单编码'变量: pageSize10变量: currentPage1。

2301_80286061的博客 2275

【零基础嵌入式学习日志】Day28:Proteus 仿真 STM32F103C8 实现 LED 闪烁,Day29:STM32F103C8 四路 LED 流水灯与位运算

STM32F103C8 的 GPIOA 时钟使能方法。GPIOA->CRL中 MODE 和 CNF 位的配置方法。使用 ODR、BSRR 和 BRR 控制 GPIO 输出。使用 SysTick 建立 1 ms 时间基准。使用逻辑探针、电压表和示波器验证 GPIO 输出。Proteus 中对仿真速度的影响。数字节点和模拟节点测量方式的区别。下一步将在 PA0 至 PA3 连接 4 只 LED,通过位移运算实现流水灯。

duhong2026的博客 596

【BigWorld 游戏服务器引擎】Cell 架构设计介绍,及Java实现方案的探索

横向扩展(Scalability):通过动态增减CellApp和BaseApp的数量,可以轻松应对玩家人数的变化。世界可以做得非常大,只需增加更多的 Cell。负载分离(Load Separation):将不同性质的负载分离,避免了单一进程瓶颈。CPU 密集型的实时计算(CellApp)和 I/O 密集型的数据操作(BaseApp)互不影响。高效的视野管理(AOI):每个 Cell 只关心自己区域内和边界上的实体,大大降低了计算复杂度。容错性:某个CellApp。

代码时光 1205

基于 STM32F103C8 的跑马灯仿真实践:从原理到代码实现

通过本次项目,我们深入理解了 STM32 的 GPIO 操作、外设库使用和 Proteus 仿真方法。跑马灯作为嵌入式开发的入门项目,为后续学习打下了坚实基础。STM32 的高级外设应用(ADC、PWM、SPI 等)基于 FreeRTOS 的多任务系统开发物联网应用开发(连接 WiFi/Bluetooth 模块)希望本文能帮助你顺利开启 STM32 开发之旅,在实践中不断积累经验,开发出更具创新性的项目!

2401_84931705的博客 1446

【AWS】创建aws云服务器EC2实例

本文介绍了如何创建aws的EC2云服务器,并介绍了如何使用Xshell远程连接上云服务器

Marcos921的博客 2500

一文读懂 AI 模型训练流程

AI模型训练流程可分为五个关键步骤:首先进行数据准备,包括收集、清洗、标注和增强数据;其次选择合适的模型架构并搭建神经网络;然后通过前向传播、损失计算和反向传播进行模型训练;接着用验证集评估模型性能,并调整超参数;最后在测试集上检验模型泛化能力。整个过程需要精心设计每个环节,才能获得性能优异的AI模型。

牧晨加油站 1478

STM32F103C8:从零开始点亮LED

STM32F103C8T6 是一款高性价比的 32 位 ARM Cortex-M3 核心单片机,广泛用于嵌入式入门项目中。本文将手把手教你如何:使用编写并编译 LED 点亮代码;使用构建最小系统并仿真;讲解代码中使用的固件库作用和仿真硬件原理图;最终让你真正实现从零开始点亮STM32上的LED灯!目录一、所需开发环境与软件二、STM32F103C8最小系统电路设计三、Keil uVision5 编写LED控制代码四、固件库作用解析五、Proteus 载入仿真并运行六、常见问题排查七、进阶建议总结。

2401_82550784的博客 1015

逆向工程师视角:拆解DataDome滑块验证码的3层防护机制与绕过思路

本文从逆向工程师视角,深入剖析DataDome滑块验证码的三层核心防护机制。第一层通过动态加密参数实现会话绑定与抗重放;第二层采集TLS指纹、鼠标轨迹动力学等多维行为数据进行一致性验证;第三层则是基于机器学习的后端异步风险决策引擎。文章不仅拆解了其技术原理,更分享了模拟、钩取等超越单纯工具调用的底层分析与绕过思路。

f6g7h8i9j的博客 730

STM32 中断控制LED流水灯(HAL库,Proteus仿真)

本文介绍了基于STM32F103的HAL库中断控制LED流水灯实验,通过STM32CubeMX配置GPIO输出和外部中断,实现LED流水灯及外部中断启停控制。实验采用软件消抖解决按键抖动问题,并利用Proteus进行仿真验证。实验步骤包括:1)使用STM32CubeMX配置GPIO和中断参数;2)在Keil中编写中断回调函数和主循环控制代码;3)硬件连接与功能测试。实验成功实现了LED流水灯效果,并通过外部中断可靠控制流水灯的启停,验证了STM32中断系统的应用。

2303_80679756的博客 1146

yolov26改进 | 检测头篇 | 利用渐近特征金字塔网络AFPN改进yolov26检测头融合P2网络结构(让小目标无所遁形,全网独家首发)

本文介绍一种基于AFPN渐近特征金字塔网络改进的YOLOv26四检测头Detect_FPN。AFPN通过逐级融合底层细节、中层结构与高层语义特征,缩小不同尺度特征之间的语义差距,减少直接融合带来的信息冲突,使检测头获得更稳定、更充分的多尺度表达。本文进一步增加高分辨率小目标检测分支,强化对微小目标、密集目标和复杂背景目标的感知能力,适合工业缺陷、遥感及无人机等场景。文中将展示基础模型与改进模型的训练对比结果,并提供完整代码、配置文件、模块注册方法及Codex修改思路,方便直接复现和二次创新。

Snu77的博客 368

化工模拟与优化软件:Aspen HYSYS二次开发_(15).工业应用与项目管理

项目背景、目标和主要流程。

kkchenjj的博客 1130

【STM32】Proteus仿真STM32教程(HAL库)三--STM32流水灯仿真

摘要: 本教程介绍使用STM32CubeMX和HAL库实现STM32流水灯的现代化开发流程,适合零基础开发者。通过CubeMX图形化配置GPIO引脚(PB0-PB7)和时钟,自动生成初始化代码,开发者只需在main.c中添加流水灯逻辑(使用HAL_GPIO_WritePin和HAL_Delay函数)。教程涵盖Proteus电路设计、CubeMX配置步骤、代码编写及仿真验证,对比HAL库与标准库的优势,强调代码需放在USER CODE注释区间以避免覆盖。最终生成HEX文件并在Proteus中完成LED流水效果

嵌入式开发 839

基于STM32设计的环境检测系统(OneNet)_365

本项目设计并实现了一种基于STM32F103RCT6单片机的环境检测系统,系统集成了多种传感器模块,具备对环境温湿度、烟雾浓度、易燃气体浓度、一氧化碳浓度和整体空气质量的实时检测功能。系统通过1.44寸SPI接口LCD实现本地数据显示,同时配备有源蜂鸣器用于环境异常报警。在数据通信方面,系统利用ESP8266-WIFI模块,采用MQTT协议将各类传感器数据上传至OneNet云平台,并借助其可视化框架实现网页端可视化界面,可通过电脑和手机浏览器远程访问,实现环境数据的远程监控。该系统设计结构简单、功能全面,适

2188

【STM32】Proteus仿真STM32教程(寄存器)1--手把手教你用寄存器点亮流水灯,彻底搞懂GPIO底层原理

STM32寄存器编程实现LED流水灯 本文以STM32F103C8T6为例,通过寄存器编程实现8路LED流水灯效果,深入解析GPIO底层工作原理。相比库函数,寄存器操作能更直观理解STM32运行机制。 核心步骤: 开启时钟:操作RCC_APB2ENR寄存器使能GPIOB时钟 配置模式:通过GPIOB_CRL寄存器设置PB0-PB7为50MHz推挽输出 控制电平:利用GPIOB_ODR寄存器轮流输出高/低电平实现流水效果 关键价值: 掌握寄存器级开发,提升代码效率和调试能力 理解时钟使能、引脚配置等底层硬件

嵌入式开发 1176

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F103C8:从零构建LED闪烁仿真系统

本文详细介绍了如何使用STM32F103C8微控制器从零开始构建LED闪烁仿真系统。通过Keil uVision5进行工程配置和代码编写,并利用Proteus搭建硬件仿真电路,深入解析了STM32固件库的使用方法,提供了完整的开发环境搭建、电路设计、仿真调试的全流程实践指南。

emacs5lisp的博客 196

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: LoRa模块原理与ATK-LORA工程实践指南
下一篇: BMS工作原理:从电芯电压特性到保护阈值的工程设计
cuda7parallel
博客等级 码龄1天 0粉丝 1273原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值