1.stm32 新建工程

news/2024/10/18 14:32:17/

总体步骤

建立工程文件夹,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)
    {
    
    }
}


http://www.ppmy.cn/news/1538854.html

相关文章

【React】如何对组件加载进行优化

1. 懒加载 (Lazy Loading) 使用 React.lazy() 和 Suspense 来实现懒加载(按需加载)组件。只有在需要时才加载对应组件,可以减小初始加载的体积。 const LazyComponent React.lazy(() > import(./LazyComponent));function App() {retur…

原生 App 上架 Mac App Store 过程总结

随着 macOS 系统的普及,越来越多的开发者希望将他们的原生应用程序发布到 Mac App Store,以便触达更广泛的用户群体。在这篇文章中,我们将详细总结原生 App 上架 Mac App Store 的整个过程,包括必要的准备工作、开发流程、测试、申…

软考系统分析师知识点十:软件工程

前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:27天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…

PHP政务招商系统——高效连接共筑发展蓝图

政务招商系统——高效连接,共筑发展蓝图 🏛️ 一、政务招商系统:开启智慧招商新篇章 在当今经济全球化的背景下,政务招商成为了推动地方经济发展的重要引擎。而政务招商系统的出现,更是为这一进程注入了新的活力。它…

利用线程池和网络动态库实现多人聊天室

利用线程池和网络动态库实现多人聊天室 概述 本项目实现一个简单的多人聊天室,采用C语言编写,利用线程池和网络动态库,实现服务端消息转发和客户端消息接收。 服务端 服务端主要负责管理客户端连接,接收并转发消息。 代码实现…

SpringCloud的学习(四)Micrometer、GateWay

Micrometer 分布式链路追踪 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起…

P4可编程技术详解:从理论到硬件实现

P4的诞生 为打破传统的固定封装模式,充分解放数据平面的编程能力,Nick McKeown领导的斯坦福大学研究团队于2014年提出可编程处理语言P4。借助P4的数据平面编程能力,用户可在网卡、交换机、路由器等网络设备上实现包括VXLAN、MPLS等在内的各种…

markdown里粘贴图片的同时保存路径 在vscode里实现

下载扩展Markdown Image 设置保存路径 参考链接 https://blog.cxplay.org/works/vscode-to-markdown-editor/#markdown-image