100_VSCOLD常用安装插件(持续更新)

📅 2026/7/2 20:37:49 👁️ 阅读次数 📝 编程学习
100_VSCOLD常用安装插件(持续更新)

代码切片模式 + API 表格 + 三棒接力

以下是更新后的模板,重点修改在## 2. [二级标题:以 xxx 为例]### (2) [三级标题:初始化代码]部分。其余章节保持不变,你之前的历史模板依然有效。


文章目录

  • 一、[一级标题:发展历史/背景概述]
    • 1. [二级标题:诞生背景]
    • 2. [二级标题:嵌入化/标准化进程]
    • 3. [二级标题:技术演进]
  • 二、[一级标题:工作原理]
    • 1. [二级标题:通俗比喻]
    • 2. [二级标题:核心机制]
    • 3. [二级标题:关键特性一]
    • 4. [二级标题:关键特性二]
  • 三、[一级标题:技术规格/核心概念]
    • 1. [二级标题:参数一]
    • 2. [二级标题:参数二]
    • 3. [二级标题:参数三]
  • 四、[一级标题:硬件实现/寄存器/功能框图]
    • 1. [二级标题:功能框图/整体架构]
    • 2. [二级标题:特殊组件/机制]
  • 五、[一级标题:实践指南/基础配置]
    • 1. [二级标题:配置流程概述]
    • 2. [二级标题:以 xxx 为例]
      • (1) [三级标题:参数确定]
      • (2) [三级标题:初始化代码 — 代码切片模式]
      • (3) [三级标题:中断服务函数/接口函数]
  • 六、[一级标题:多实例/多通道编排示例]
    • 1. [二级标题:统一初始化]
    • 2. [二级标题:各实例处理函数]
  • 七、[一级标题:任意平台纯软件怎么配置]
    • 1. [二级标题:核心思想]
    • 2. [二级标题:硬件假设与平台适配宏]
    • 3. [二级标题:软件管理框架]
      • (1) [三级标题:数据结构与全局变量]
      • (2) [三级标题:注册通道]
      • (3) [三级标题:引脚扫描与标志位置位]
      • (4) [三级标题:优先级调度与中断处理]
      • (5) [三级标题:纯软件时钟节拍]
      • (6) [三级标题:完整使用示例]
    • 4. [二级标题:软件方式 vs 硬件方式]
    • 5. [二级标题:小结]
  • 八、[一级标题:提高稳定性/精度的技巧]
    • 1. [二级标题:技巧一]
    • 2. [二级标题:技巧二]
    • 3. [二级标题:技巧三]
  • 九、[一级标题:结语]

[引言:用一段话引出主题,说明这篇文章要讲什么、为什么值得读]

一、[一级标题:发展历史/背景概述]

1. [二级标题:诞生背景]

[正文内容]

2. [二级标题:嵌入化/标准化进程]

[正文内容]

3. [二级标题:技术演进]

函数名功能说明
API_Function_1功能描述
API_Function_2功能描述

二、[一级标题:工作原理]

1. [二级标题:通俗比喻]

[正文内容]

2. [二级标题:核心机制]

[正文内容]

3. [二级标题:关键特性一]

[正文内容]

4. [二级标题:关键特性二]

[正文内容]

三、[一级标题:技术规格/核心概念]

1. [二级标题:参数一]

[正文内容]

2. [二级标题:参数二]

[正文内容]

函数名功能说明
API_Function_1功能描述
API_Function_2功能描述

代码示例:

/*CN:注释--EN:Comment*/voidFunction_Name(void){/*CN:函数体--EN:Function body*/}

3. [二级标题:参数三]

[正文内容]

函数名功能说明
API_Function_1功能描述
API_Function_2功能描述

四、[一级标题:硬件实现/寄存器/功能框图]

1. [二级标题:功能框图/整体架构]

[正文内容]

函数名功能说明
API_Function_1功能描述
API_Function_2功能描述

2. [二级标题:特殊组件/机制]

[正文内容]

/*CN:配置代码--EN:Config code*/voidConfig_Function(void){/*CN:配置项--EN:Config item*/}

五、[一级标题:实践指南/基础配置]

1. [二级标题:配置流程概述]

[正文内容]

  1. [步骤一]
  2. [步骤二]
  3. [步骤三]
  4. [步骤四]

2. [二级标题:以 xxx 为例]

[正文内容]

(1) [三级标题:参数确定]

  • [参数说明]

(2) [三级标题:初始化代码 — 代码切片模式]

整个初始化函数的结构如下,后续按“接力棒”顺序拆解:

/** * Function: Module_Init * Description: CN:初始化描述--EN:Init description * Parameters: 无 * Return value:无 */voidModule_Init(void){/*CN:===== 结构体变量定义 =====--EN:===== Structure variable definitions =====*/GPIO_InitTypeDef GPIO_InitStruct;EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;/*CN:===== 第一棒:... =====--EN:== First leg: ... ==*//*CN:===== 第二棒:... =====--EN:== Second leg: ... ==*//*CN:===== 第三棒:... =====--EN:== Third leg: ... ==*/}
  • 第一棒:GPIO+AFIO—— 把引脚接到EXTI线上

用到的库函数API及其功能说明如下:

函数名功能说明
RCC_APB2PeriphClockCmd使能 APB2 总线上的外设时钟(GPIOA、AFIO)
GPIO_Init根据结构体参数初始化指定 GPIO 引脚的模式和上下拉
GPIO_EXTILineConfig将指定 GPIO 端口的指定引脚映射到对应的 EXTI 中断线
/*CN:===== 第一棒:GPIO + AFIO —— 把引脚接到 EXTI 线上 =====--EN:===== First leg: GPIO + AFIO — connect pin to EXTI line =====*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;/*CN:选择PA0--EN:Select PA0*/GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;/*CN:内部上拉输入,按键未按时为高电平--EN:Internal pull-up input, high when key not pressed*/GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);/*CN:将PA0映射到EXTI0中断线--EN:Map PA0 to EXTI0 interrupt line*/
  • 第二棒:EXTI—— 设置触发条件,使能中断线

用到的库函数API及其功能说明如下:

函数名功能说明
EXTI_Init根据结构体参数初始化指定 EXTI 中断线的触发模式、触发沿并使能
/*CN:===== 第二棒:EXTI —— 设置触发条件,使能中断线 =====--EN:===== Second leg: EXTI — set trigger condition, enable interrupt line =====*/EXTI_InitStruct.EXTI_Line=EXTI_Line0;/*CN:选择EXTI0线--EN:Select EXTI0 line*/EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;/*CN:中断模式(非事件模式)--EN:Interrupt mode (not event mode)*/EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;/*CN:下降沿触发:按键按下时高→低--EN:Falling edge trigger: high→low when key pressed*/EXTI_InitStruct.EXTI_LineCmd=ENABLE;/*CN:使能EXTI0中断线--EN:Enable EXTI0 interrupt line*/EXTI_Init(&EXTI_InitStruct);
  • 第三棒:NVIC—— 设置优先级,使能中断通道

用到的库函数API及其功能说明如下:

函数名功能说明
NVIC_Init根据结构体参数初始化指定中断通道的抢占优先级、子优先级并使能
/*CN:===== 第三棒:NVIC —— 设置优先级,使能中断通道 =====--EN:===== Third leg: NVIC — set priority, enable IRQ channel =====*/NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;/*CN:EXTI0对应的NVIC通道--EN:NVIC channel for EXTI0*/NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;/*CN:抢占优先级1--EN:Preemption priority 1*/NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;/*CN:子优先级0--EN:Subpriority 0*/NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;/*CN:使能NVIC通道--EN:Enable NVIC channel*/NVIC_Init(&NVIC_InitStruct);}

(3) [三级标题:中断服务函数/接口函数]

用到的库函数API及其功能说明如下:

函数名功能说明
EXTI_GetITStatus检查指定 EXTI 中断线的挂起标志是否置位
EXTI_ClearITPendingBit清除指定 EXTI 中断线的挂起标志位
/** * Function: EXTI0_IRQHandler * Description: CN:EXTI0中断服务函数--EN:EXTI0 ISR * Parameters: 无 * Return value:无 */voidEXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0)!=RESET)/*CN:确认是EXTI0的中断请求--EN:Confirm it's EXTI0 interrupt request*/{EXTI_ClearITPendingBit(EXTI_Line0);/*CN:清除挂起标志--EN:Clear pending flag*//*CN:在这里执行用户逻辑--EN:User logic goes here*/}}

六、[一级标题:多实例/多通道编排示例]

[正文内容]

实例/通道参数A参数B理由
实例一00说明
实例二10说明

用到的库函数API及其功能说明如下:

函数名功能说明
API_Function_4功能描述

1. [二级标题:统一初始化]

/** * Function: All_Init * Description: CN:统一初始化描述--EN:Unified init description * Parameters: 无 * Return value:无 */voidAll_Init(void){/*CN:初始化逻辑--EN:Init logic*/}

2. [二级标题:各实例处理函数]

/** * Function: Instance_Handler * Description: CN:实例处理函数描述--EN:Instance handler description * Parameters: 无 * Return value:无 */voidInstance_Handler(void){/*CN:处理逻辑--EN:Handler logic*/}

[总结段落]

七、[一级标题:任意平台纯软件怎么配置]

[正文内容]

/*========================================*//*CN:内嵌汇编指令宏--EN:Inline assembly instruction macros*//*========================================*/#defineDISI()_asm{disi}/*CN:关总中断--EN:Disable global interrupt*/#defineWDTC()_asm{wdtc}/*CN:清看门狗--EN:Clear watchdog timer*/#defineSLEP()_asm{slep}/*CN:进入休眠模式--EN:Enter sleep mode*/#defineNOP()_asm{nop}/*CN:空操作,单周期延时--EN:No operation, single-cycle delay*/#defineENI()_asm{eni}/*CN:开总中断--EN:Enable global interrupt*/

1. [二级标题:核心思想]

[正文内容]

  • 要点一:说明
  • 要点二:说明
  • 要点三:说明

2. [二级标题:硬件假设与平台适配宏]

[正文内容]

/*========================================*//*CN:平台适配宏(按实际MCU修改以下定义)--EN:Platform adaptation macros (modify per actual MCU)*//*========================================*/#definePIN_DIR_IN()/*CN:设置引脚为输入模式--EN:Set pin as input mode*/#definePIN_IT_FALLING()/*CN:配置下降沿触发中断--EN:Configure falling edge interrupt*/#definePIN_READ()/*CN:读取引脚电平--EN:Read pin level*/#definePIN_CLR_FLAG()/*CN:清除中断标志位--EN:Clear interrupt flag*/

平台适配宏的具体实现示例:

MCU型号PIN_DIR_IN()实现PIN_IT_FALLING()实现PIN_CLR_FLAG()实现
MCU_A代码示例代码示例代码示例
MCU_B代码示例代码示例代码示例
任意MCU写方向寄存器对应位为0写边沿选择寄存器写标志寄存器对应位清0

3. [二级标题:软件管理框架]

(1) [三级标题:数据结构与全局变量]

#defineSW_MAX_SRC4/*CN:最大软件中断源数量--EN:Max software interrupt sources*/typedefenum{SW_PRIORITY_0=0,/*CN:最高优先级--EN:Highest priority*/SW_PRIORITY_1=1,SW_PRIORITY_2=2,SW_PRIORITY_3=3/*CN:最低优先级--EN:Lowest priority*/}SW_Priority_t;/*CN:优先级枚举--EN:Priority enum*/typedefstruct{uint8_tpin_id;/*CN:引脚编号--EN:Pin ID*/SW_Priority_t priority;/*CN:优先级--EN:Priority*/uint8_tflag;/*CN:中断标志位(1=挂起)--EN:IRQ flag (1=pending)*/void(*handler)(void);/*CN:中断服务函数指针--EN:ISR function pointer*/}SW_Ch_t;/*CN:通道结构体--EN:Channel structure*/SW_Ch_t SW_Ch[SW_MAX_SRC];/*CN:通道数组--EN:Channel array*/uint8_tSW_Count=0;/*CN:已注册通道数--EN:Registered channel count*/

(2) [三级标题:注册通道]

/** * Function: SW_Add * Description: CN:注册一个软件中断通道--EN:Register a software IRQ channel * Parameters: pin_id - CN:引脚编号--EN:Pin ID * priority - CN:优先级--EN:Priority * handler - CN:中断服务函数指针--EN:ISR function pointer * Return value:CN:通道索引,失败返回-1--EN:Channel index, -1 on failure */int8_tSW_Add(uint8_tpin_id,SW_Priority_t priority,void(*handler)(void)){int8_tret=-1;DISI();/*CN:关中断,保护全局变量--EN:Disable interrupt, protect global variables*/if(SW_Count<SW_MAX_SRC){SW_Ch[SW_Count].pin_id=pin_id;SW_Ch[SW_Count].priority=priority;SW_Ch[SW_Count].flag=0;SW_Ch[SW_Count].handler=handler;ret=SW_Count;SW_Count++;/*CN:通道计数+1--EN:Increment channel count*/}ENI();/*CN:开中断--EN:Enable interrupt*/returnret;/*CN:返回通道索引--EN:Return channel index*/}

(3) [三级标题:引脚扫描与标志位置位]

/** * Function: SW_Scan * Description: CN:扫描所有注册的软件中断引脚--EN:Scan all registered software IRQ pins * Parameters: 无 * Return value:无 */voidSW_Scan(void){uint8_ti;uint16_tnop_cnt;for(i=0;i<SW_Count;i++){if(SW_Ch[i].pin_id==10)/*CN:以P10为例--EN:Take P10 as example*/{/*CN:NOP延时消抖,16MHz下约100个NOP≈6μs--EN:NOP debounce delay, ~100 NOPs≈6μs at 16MHz*/for(nop_cnt=0;nop_cnt<100;nop_cnt++){NOP();}if(PIN_READ()==0)/*CN:下降沿触发--EN:Falling edge trigger*/{SW_Ch[i].flag=1;/*CN:置中断标志位--EN:Set IRQ flag*/PIN_CLR_FLAG();/*CN:清除硬件中断标志--EN:Clear hardware interrupt flag*/}}}}

(4) [三级标题:优先级调度与中断处理]

/** * Function: SW_Dispatch * Description: CN:按优先级从高到低处理挂起的中断--EN:Process pending IRQs from high to low priority * Parameters: 无 * Return value:无 */voidSW_Dispatch(void){uint8_ti;uint8_tprocessed_priority=SW_PRIORITY_0;/*CN:从最高优先级开始--EN:Start from highest priority*/while(processed_priority<=SW_PRIORITY_3){for(i=0;i<SW_Count;i++){if(SW_Ch[i].flag&&SW_Ch[i].priority==processed_priority){DISI();/*CN:关中断,保护标志位--EN:Disable interrupt, protect flag*/SW_Ch[i].flag=0;/*CN:清除软件中断标志--EN:Clear software IRQ flag*/ENI();/*CN:开中断--EN:Enable interrupt*/if(SW_Ch[i].handler!=NULL){SW_Ch[i].handler();/*CN:执行中断服务函数--EN:Execute ISR*/}}}NOP();/*CN:优先级切换间隔--EN:Inter-priority gap*/processed_priority++;/*CN:处理下一级--EN:Process next level*/}}

(5) [三级标题:纯软件时钟节拍]

/** * Function: SW_Main_Loop * Description: CN:纯软件主循环,用NOP循环控制扫描速率--EN:Pure software main loop, uses NOP loop to control scan rate * Parameters: scan_period_nop - CN:每次主循环迭代的NOP个数--EN:Number of NOPs per main loop iteration * Return value:无 */voidSW_Main_Loop(uint16_tscan_period_nop){while(1){uint16_tnop_cnt;SW_Scan();/*CN:扫描所有中断引脚--EN:Scan all IRQ pins*/SW_Dispatch();/*CN:按优先级调度--EN:Dispatch pending IRQs*/WDTC();/*CN:喂狗--EN:Feed watchdog*/for(nop_cnt=0;nop_cnt<scan_period_nop;nop_cnt++){NOP();/*CN:单周期空操作--EN:Single-cycle no-op*/}}}

(6) [三级标题:完整使用示例]

/** * Function: ISR_Handler * Description: CN:中断服务函数--EN:ISR handler * Parameters: 无 * Return value:无 */voidISR_Handler(void){/*CN:处理逻辑--EN:Handler logic*/}/** * Function: Example_Soft_IRQ * Description: CN:软件中断使用示例--EN:Software IRQ usage example * Parameters: 无 * Return value:无 */voidExample_Soft_IRQ(void){PIN_DIR_IN();/*CN:配置引脚为输入--EN:Configure pin as input*/PIN_IT_FALLING();/*CN:使能下降沿触发--EN:Enable falling edge trigger*/SW_Add(10,SW_PRIORITY_0,ISR_Handler);/*CN:注册中断,最高优先级--EN:Register IRQ, highest priority*/SW_Main_Loop(1600);/*CN:启动主循环,1600个NOP≈100μs@16MHz--EN:Start main loop, 1600 NOPs≈100μs@16MHz*/}

4. [二级标题:软件方式 vs 硬件方式]

软件方式让原理一目了然,但代价也很明显:

维度硬件方式软件框架
响应速度纳秒级(硬件自动压栈跳转)微秒–毫秒级(受NOP延时周期制约)
CPU占用极低(硬件并行仲裁)主循环每次迭代都要扫描所有引脚
优先级抢占硬件自动嵌套抢占必须等当前处理函数返回才能响应新中断
时钟来源内核时钟自动驱动NOP指令周期手工踩节拍
适用场景标准平台教学演示、无硬件控制器的极简MCU

5. [二级标题:小结]

[总结段落]

八、[一级标题:提高稳定性/精度的技巧]

1. [二级标题:技巧一]

[正文内容]

2. [二级标题:技巧二]

[正文内容]

/*CN:示例代码--EN:Example code*/DISI();/*CN:临界区操作--EN:Critical section operation*/ENI();

3. [二级标题:技巧三]

[正文内容]

  1. [原则一]
  2. [原则二]
  3. [原则三]

九、[一级标题:结语]

[结语段落]

扩展阅读:

  • 参考资料一
  • 参考资料二
  • 参考资料三

使用说明:

  1. 所有[xxx]占位符替换为实际内容。
  2. 编号样式严格执行:一、1.(1)a.i.
  3. 代码注释统一使用/*CN:中文--EN:English*/双语格式。
  4. 函数命名统一使用UPPER_SNAKE_CASE(如Module_Function_Name)。
  5. 所有缩进使用&emsp;&emsp;,严禁空格和 Tab。
  6. 所有表格均使用 HTML<table>格式
    实践指南章节的初始化代码,推荐使用“代码切片”模式:按GPIOEXTINVIC的顺序分块,每块前附 API 表格,方便读者按棒次理解。
  7. 各章节可根据主题需要增删,但序号层级不可跳级。

编号样式(强制执行)

  • 一级:一、(中文数字加顿号) (强制执行)
  • 二级:1.(阿拉伯数字加英文句点) (强制执行)
  • 三级:(1)(带括号的阿拉伯数字) (强制执行)
  • 四级:a.(小写字母加英文句点) (强制执行)
  • 五级:i.(小写罗马数字加英文句点) (强制执行)
  • 六级:(带圈数字符号)

上面只是一个模板下面是内容。然后你基于这个框架换个名字输出一份对应的博客