1.stm32 新建工程

总体步骤

建立工程文件夹,Keil中新建工程,选择型号

工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹

工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里

工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹路径Start、Library、User。

工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER

工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

代码逐行解析

  1. 引入设备头文件

    复制代码
    #include "stm32f10x.h"
    • 该头文件包含STM32F10x系列微控制器的所有常量定义、寄存器地址映射和外设功能声明。
  2. 主函数入口

    复制代码
    int main(void)
    • main函数是C语言程序的入口,所有程序的执行都从这里开始。
  3. 使能GPIOC端口时钟

    复制代码
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    • 通过RCC的APB2外设时钟控制功能使能GPIOC的时钟,这一步是必要的初始化步骤,没有时钟,GPIO端口无法工作。
  4. 配置GPIO初始化结构体

    复制代码
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    • 创建一个GPIO_InitTypeDef类型的结构体实例,用于配置PIN的功能:
      • GPIO_Mode_Out_PP:将引脚设置为推挽输出模式。
      • GPIO_Pin_13:选择PC13为目标引脚。
      • GPIO_Speed_50MHz:设置输出速率为50MHz,适合于多数应用。
  5. 初始化GPIO

    复制代码
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    • 调用此函数,通过传递之前配置好的结构体,将配置应用于GPIOC的PC13引脚。
  6. 控制GPIO电平

    复制代码
    GPIO_SetBits(GPIOC, GPIO_Pin_13);
    GPIO_ResetBits(GPIOC, GPIO_Pin_13);
    • GPIO_SetBits:将PC13设置为高电平,即将引脚拉电压高状态。
    • GPIO_ResetBits:将PC13设置为低电平,即将引脚拉电压低状态。
    • 这两行代码实际上会非常快速的执行,因此你可能看不到LED的变化。
  7. 无限循环

    复制代码
    while(1)
    {
    }
    • 程序进入一个空的无限循环,防止程序结束并让微控制器继续运行。

但是在有些老的编译器,它要求所有的局部变量定义必须放到函数的最前面,如果你的编译器是这样的话,就需要把这一行提到最前面去

我的编译器就是这样

应该将所有的变量声明放在代码块的最开始部分,在第一条可执行语句之前

#include "stm32f10x.h" // Device header

int main(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&GPIO_InitStructure);

// GPIO_SetBits(GPIOC,GPIO_Pin_13);

GPIO_ResetBits(GPIOC,GPIO_Pin_13);

while(1)

{

}

}

相关推荐
CODECOLLECT14 分钟前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen1 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠3 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_4 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技6 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计6 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦7 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报7 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业7 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能7 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微