代码编织梦想

我们学习用的开发板是STM32F407ZGT6核心板,其实大可不必担心板子不一样什么的,主要是自己得理解它是怎么实现的。

程序使用的也是普中科技的示例程序,具体就模板怎么创建有兴趣的可以自己去了解一下,我们今天主要讲解模板的使用。

程序连接:

链接:https://pan.baidu.com/s/16-RmT6SIHHIMLmJv1Vh1xw 
提取码:lcue 
接下来就开始进入正题

程序在keil中打开就是上图这样,这里我们先介绍一下工程项目下的文件夹都有什么作用,这里其实我们主要用到的就是User文件夹下的main.c文件还有就是APP文件夹下的led.c,其他文件夹我们后面添加文件时会做详细介绍

User文件夹下的main.c文件主要就是我们存放主程序,我们知道32是用C语言编写的控制程序,而C语言又是从主函数(main函数)开始执行的,main.c主要就是我们想干什么,执行什么功能,调用什么子函数都在这里写。当然这次我们只是写简单的点亮led

#include "stm32f4xx.h"
#include "led.h"

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main()
{
	LED_Init();    //led的初始化,可右键go to查看具体位置和内容
	while(1)
	{
		GPIO_ResetBits(GPIOF,GPIO_Pin_9);//复位F9 点亮D1
	}
}

这里include包含两个重要的头文件一个F4芯片的还有的是我们自己创建的led.h(里面放了我们使用到的宏定义和函数声明)

接下来,我们说说APP文件夹,app文件夹下一般放的都是我们自己的创建的硬件配置文件比如这次led.c和led.h。下次我们写按键同样只用在app下添加key文件夹然后创建key.h和key.c就可以了,这里如果还有疑问欢迎联系作者微信:18567588732

再说回led.c

#include "led.h"

/*******************************************************************************
* 函 数 名         : LED_Init
* 函数功能		   : LED初始化函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void LED_Init()
{
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); //使能端口F时钟
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //输出模式
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//管脚设置F9
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100M
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉
	GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化结构体
	GPIO_SetBits(GPIOF,GPIO_Pin_9);
}



这里除了include “led.h”

就只有一个函数void LED_Init()这里面写的stm32GPIO的标准库的开启和基本配置方法,想起上面main.c中LED_Init()函数被调用,这里是不是突然明白了许多。

还有LED_Init中初始化的具体内容就是一些寄存器的配置这里不做过多介绍

至于led.h文件

#ifndef _led_H
#define _led_H

#include "stm32f4xx.h"


void LED_Init(void);


#endif

里面就是一些宏定义和函数声明,这里我们没用到那个变量什么的,只有一个led初始化函数的声明

简单的程序我们一个main.c文件也可以实现,但是当后面我们学习的功能越来越多,我们模板的使用优势就体现出来,所以希望大家从开始就能熟练掌握模板的使用,当然大家使用的模板可能有些不同,但是这种思维我得有,毕竟今后一个大的项目,单靠一个main.c文件实现是不可能的。

最后还有include包含文件路径的添加,具体如下图

至此我们的stm32点亮led的程序就算写好了,编译+连接,然后下载验证就行了。

以上有什么问题欢迎和小编交流。

最后祝福一块学嵌入式的小伙伴,工作顺利,学业有成。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/zy_9281/article/details/111086021

阿里资深架构师必备10个开发者神器【我收藏了】-爱代码爱编程

目录 前言 一、Java 线上诊断工具 Arthas 二、IDE 插件 Cloud Toolkit 三、混沌实验注入工具 ChaosBlade 四、Java 代码规约扫描插件 五、应用实时监控工具 ARMS 六、静态开源站点搭建工具 Docsite 七、Android 平台上的秒级编译方案 Freeline 八、性能测试工具 PTS 九

使用Arduino开发板连接ec11旋转编码器-爱代码爱编程

使用Arduino开发板连接ec11旋转编码器 因为最近要用到旋转编码器,从网上花了好长时间找了好多关于arduino使用旋转编码器的资料,总是找不到合适的,最后总结了一下(部分内容有借鉴,仅作分享,未作商用),分享给大家。 需要的元件:杜邦线、arduino uno开发板、ec旋转编码器、面包板 首先了解一下编码器(附上几张ec11编码器的图)

MySQL中boolean类型设置(想法分享)-爱代码爱编程

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,博客昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步! 吾等采石之人,应怀大教堂之心,愿你们奔

苦恼!教你拿下Sentinel的使用,你还怕搞不定分布式系统流控、熔断吗-爱代码爱编程

前言 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集

iOS OC动态运行时(runtime)~动态特性表现-爱代码爱编程

一、概念: 因为运行时 runtime 是 必须到运行时(run time)才会做一些事情; 所以OC的动态特性表现为了三个方面:动态类型、动态绑定、动态加载; 动态:主要是将数据类型的确定由编译时,推迟到了运行时。之所以叫做动态, 二、iOS OC动态运行时~动态类型 1.动态类型,就是id类型。 2.动态类型是跟静态类

Android Studio 4.x版本gradle本地配置教程-爱代码爱编程

Android Studio 4.1.1win范例 新建Gradle文件夹。4.x最低的版本是支持gradle6.5(或者其他的文件夹,尽量不要在C) 路径示范:C:\Gradle\gradle-6.5 配置gradle默认目录 文件(file)—构建、执行、部署—Gradle—gradle用户主目录 将下载的文件解压到gradle 6.5 链接:

Moveit!配置/开发机械臂全过程-爱代码爱编程

目录 1. 使用MoveIt Setup Assistant完成基础配置2. 配置工作空间3. 启动demo4. 为自己的代码设置依赖5. 运行自己的代码操控机器人 1. 使用MoveIt Setup Assistant完成基础配置 根据自己需要的机械臂进行配置,各界面参数介绍请查阅: Setuo Assistant 此处不再赘述。 ro

基于标准库函数与基于HAL库函数的stm32编程方式的差异-爱代码爱编程

基于标准库函数与基于HAL库函数的stm32编程方式的差异 一、标准库二、HAL库参考资料 一、标准库 STM32有非常多的寄存器,而导致了开发困难,所以为此ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟

一种C语言的状态机-爱代码爱编程

一、背景 以前写状态机的思路都是if else或者switch case,今天我们稍微把思路整理一下,把状态机的状态迁移,和事件触发管理的更直观一些。 二、正题 假设有3个状态,3个事件,每个事件都会触发状态机的状态迁移。在状态机处于某个状态时,都需要执行一次该状态的函数;在事件来临时,即状态发生迁移时,只需要执行一次 状态迁移函数。 State

I2C通信协议详细讲解-爱代码爱编程

I2C协议讲解 实验准备PCB转换板原理图及PCB电路图讲解流程我们为什么要学习I2C通信I2C协议简介:I2C物理层特点I2C协议层写数据读数据读和写数据通讯的起始和停止信号地址及数据方向时钟控制逻辑通讯过程主发射器主接收器通讯引脚I2C程序讲解初始化BH1750光照度传感器的大致流程为:器件安装程序源码 实验准备 一块STM32最小系统板

工作4年工资8K,还有什么理由不努力?-爱代码爱编程

—— 提问 发哥,我现在还是从事裸机开发,51单片机,会点arm,但没有用arm真正做完整开发的经验,细想感觉自己会的不是很多,薪资提不上去,想做更高级点的工作,虽然自学点,到没有真正的实战经验,应聘不上,工作4年了,女朋友建议我去参加培训,我的大学同学在大四有些就参加培训了,现在工作薪资待遇挺不错,但我现在要放下这些去培训,有点不

基于I2C通信协议的温湿度采集-爱代码爱编程

本文目的是使用I2C通信协议对AHT20温湿度传感器进行数据采集,并将采集到的温湿度数据通过串口发送给上位机(windows10)。 目录 (一)I2C通信协议1. I2C协议简介2. I2C总线特点3. I2C工作原理(二)I2C的实现方式1.软件I2C2.硬件I2C3.软硬I2C的比较(三)温湿度数据采集1.实验要求2.主要代码3.