用的是普中开发板
在stm32中用官方库来实现通过操作i/o口,使i/o口产生信号,从而控制led的亮灭

首先我们发现在用户文件夹user中创建三个.c文件,一个main.c主要是存放我们编写的main函数
,一个stm32f10x_it.c,这个之后再说,它本身是个所有中断函数的入口,默认为空。当我们需要使用中断时在进行编写,还有一个项目.c,这个文件夹需要用户自己根据自己的项目需求进行编写,比如我现在写的是一个led控制的程序,所以我在此文件夹下编写对led的控制。
思考:.c和.h的区别,为什么同样是子程序有的定义在.c中也有的定义在.H里面?一般来说是这样的,所有函数定义和变量放在.c中,告诉使用者怎么运行。而.h只做声明,声明包括一些宏定义,变量,函数,这只是告诉使用者这个程序能干什么,该如何用,但是编译后不产生代码,实际上.h上可以放任何东西,但是为了结构清晰,得区别对待。
我们可以看到在.c文件开头,总会存在一个#include,这个#include就完全可以看作把#include后面的.h文件赋值到.c中。往往当一个.h文件被多个.c包含,就会出现重复定义的错误了,声明可以很多次,但定义只有一次,其实还有更深层次原因,这里就不过多介绍了
在main.c中编写控制程序,测试我们的程序
#include "public.h"//公共函数头文件
这是第一条语句,我们再看public.h里面声明了什么东西
#ifndef _public_H
#define _public_H

文件内容

#endif
重复包含(重复定义)
由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。
通过条件编译开关来避免重复包含(重复定义)

反正也就是说这条语句已经定义了所有函数,变量
之后进入int main()编写主函数
里面就两句简单的命令。LED_Init();和led_display(),前者对led端口和时钟进行初始化,后者对led进行显示,查看初始化的内容发现里面写了好多东西,又臭又长。
翻阅stm32的固件库使用手册发现gpio初始化函数规范写法是
GPIO_InitTypeDef structure

typedef struct
{
u16 GPIO_Pin;//选择设置gpio管脚
GPIOSpeed_TypeDef GPIO_Speed;#设置管脚输出速率
GPIOMode_TypeDef GPIO_Mode;#设置模式
} GPIO_InitTypeDef;
以上是个数据结构
另外由于每个外设都要设置时钟,所以也要对时钟进行初始化,而用到时钟的外设库就是rcc,所以我们也要把stm32f10x_rcc.c添加到工程文件夹里
同样查阅了固件库使用手册知道关于复位和时钟设置是rcc
所以在led初始化的时候我们也要对始终进行初始化,并且开启gpioc的外设时钟,即用RCC_APB2PeriphClockCmd函数至于为什么使用apb2而不使用apb1,是由于两者的periph值不同,gpio口是放在apb2的描述内。

来缕一缕思路

我要想led亮灭,就得控制管脚,通过给管角高低电平,而查阅中文手册,gpio有这个用途,然后led是一个外设,我们知道,使用外设就需要使用外部时钟
因为我写的工程是关于led的,所以我建了一个led.c的文件告诉我怎么运行,并且建了一个led.h文件告诉我我需要用那些东西,怎么用定义了的函数以及我所需要的库。led.c中初始化了时钟和操控的led口,一些参数的修改,最后通过设置或消除指定的数据端口位,因为要造成亮灭效果,亮就是给端口数据,而灭就是不给端口数据,而gpio_setbits和gpio_resetbits函数有这功能,所以我们想的是亮和灭隔段时间,在其中加入延迟。可以这么理解,初始化的目的是为了完成我们理想中的效果,将所有参数都确定下来,并运行出来,而真正操作的时候我们给他数据并再删除数据。

理解了这些,那么实现流水灯就好写代码了

------------------------------*-*(7.28)-------------------------------------

排版有很大的问题,给大家造成阅读的不便,非常抱歉,下次一定改进

更新一个理解上的错误gpio_setbits和gpio_resetbits函数的功能确切的来说是控制输出电平,前者控制输出高电平,后者控制输出低电平

转载于:https://www.cnblogs.com/bebox/p/7245346.html

stm32打怪升级之再见闪烁灯相关推荐

  1. STM32系统定时器SysTick(只能向下递减)延时闪烁灯

    参考:stm32 系统定时器 SysTick 作者:点灯小哥 发布时间: 2021-03-10 13:46:00 网址:https://blog.csdn.net/weixin_46016743/ar ...

  2. stm32工程和算法分享(12)--精准闪烁灯[定时中断]

    stm32工程和算法分享(12)–精准闪烁灯[定时中断] 两种方式 闪烁与定时器同步 利用标志位,定时器设置的时间间隔较小 不要在定时器中断函数写太多语句,我们通常借助标志位来实现 我们设置400ms ...

  3. ## STM32——闪烁灯程序

    STM32--闪烁灯程序 单片机的闪烁灯是继点灯后的一个简单的程序,这也是每一个初学者的必经路程,也并没有我们想象的那么难,我们要相信自己.人生难得几回搏,此时不搏待何时. --至每一个为自己的理想而 ...

  4. 7. STM32——定时器中断(1秒闪烁灯)

    STM32--定时器中断(1秒闪烁灯) 基本框架 1. 配置定时器时钟 在 stm32f10x_rcc.h 头文件中查找相关函数函数 2. 配置定时器结构体 在 stm32f10x_tim.h 头文件 ...

  5. STM32通过串口控制LED闪烁或者呼吸效果

    STM32通过串口控制LED闪烁或者呼吸效果 目录 STM32通过串口控制LED闪烁或者呼吸效果 1.准备工作 2.思路分析 3.实际操作 4.小结 1.准备工作 1.首先我们需要准备32的最小系统板 ...

  6. 程序猿菜鸟打怪升级—一路火花带闪电

    文章目录 一. 昨夜西风凋碧树,独上高楼,望尽天涯路 二. 衣带渐宽终不悔,为伊消得人憔悴 三.众里寻他千百度,蓦然回首,那人却在,灯火阑珊处 [告别平庸的9个方法] 各位小伙伴,大家好!我是猿人谷, ...

  7. 【STM32学习笔记-点亮LED灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...

  8. 面向应用学习stm32(1)-GPIO输出点亮灯

    前导:本文的目的与,意在于面向应用的学习单片机,故不会涉及太多的原理知识,例如寄存器之类的. 主要目的在于面向应用的学习单片机,学会单片机的基础用法,开发板采取野火的指南者f103. 作者大二小白,写 ...

  9. 打怪升级之小白的大数据之旅(一)<Java基础语法之Java的身世之谜>

    打怪升级之小白的大数据之旅(一) Java基础语法之Java的身世之谜 打怪升级之小白的大数据之旅(一) 前言 一.学习大数据之前 二.Java基础 what? why? how? 总结 前言 做了几 ...

最新文章

  1. 点击除元素以外的任意地方隐藏元素js
  2. 360企业安全完成Pre-B轮12.5亿融资
  3. java输出gc_GC输出澄清
  4. 用ASP.NET Core MVC 和 EF Core 构建Web应用 (一)
  5. 【错误记录】python requests库 Response 判断坑
  6. 抽象数据类型,让Oracle数据库数据管理更加容易
  7. 【模板】快速排序(洛谷-P1177)
  8. 使用Python开发小说下载器,不再为下载小说而发愁 #华为云·寻找黑马程序员#
  9. 为什么你学HTML5前端这么久,水平还是烂成渣?
  10. 嵌入式系统功能概要设计说明_嵌入式软件架构设计实际该怎么做?
  11. JavaScript详细教程归纳
  12. 【JZOJ A组】时空幻境
  13. PTA 7-2 统计素数并求和
  14. 用C#写经理评分系统
  15. PC文件在线互传网站推荐
  16. ANSYS APDL 绘制云图时出现错误“The Requested S data is not available. The PLNSOL command is ignored“的解决方法
  17. 人工智能与神经生理学:差异为何重要
  18. 《重说中国近代史》—张鸣——(2)战争的开始
  19. vue props默认值大坑
  20. Batch Copy files and Replace content accordingly

热门文章

  1. Li‘s 核磁共振影像数据处理-19-FSL界面可视化操作介绍
  2. leet234.回文链表
  3. html5超萌哈士奇,哈士奇,是一种让人又爱又恨,又拥有自己独特风格的雪橇犬...
  4. 20 个短小精悍的 pandas 骚操作
  5. 区块链知识点杂记(并不全面)
  6. 2020年机修钳工(初级)报名考试及机修钳工(初级)模拟试题
  7. SMAA算法详解 - SMAANeighborhoodBlendingPS
  8. CSS画五星红旗,我请AutoCAD帮忙
  9. 编码:隐匿在计算机软硬件背后的语言pdf-Code:The Hidden Language of Computer Hardware and Software-Charles Petzold-pdf
  10. 组件分享之后端组件——基于Golang语言的游戏服务器框架leaf