STM32学习笔记一(LED,跑马灯,呼吸灯)

2023-05-16

本人是初学者,水平有限,写个简单的学习笔记方便大家参考,同时也方便自己查缺补漏。

STM32学习一

1.点亮板上的LED小灯

首先,我们在点灯之前还要看看LED的硬件连接

看到硬件电路后,发现小灯是低电平点亮的,也就说通过给的IO口送低电平就可以点亮LED了。那么我们该如何操作呢,是像51单片机那样直接给直接类似sbit LED = P1 ^ 0;那后在主函数里写个LED = 0;就好了呢?回答没有那么简单,在STM32里面可以通过寄存器的配置来操作IO口,也可以通过STM32的固件库来操作IO口。当然直接操作寄存器的话,感官上比较的直接,但是如果我们要配置很多的IO口以及模式的时候就没那么方便了,或许我输错了一个字符,我们相应的操作就没法实现,所以我个人推荐使用固件库来操作。因为所有的外设的驱动官方都给封装好了,方便直接,至于怎么实现的就要看你学习的深度了,刚开始熟悉固件库的使用就好了。

那么我们操作IO的相应的库函数有哪些呢,下面我来简单的说一下,直说我下面例程里用到的函数,没有用到的我就不讲了,因为库函数很多,要全部都讲的话你我都吃不消。好的,现在我要全部点亮5个LED小灯我需要用到下面的库函数:

1)GPIO_InitTypeDef GPIO;结构体

2)void RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,  ENABLE);时钟配置函数

3)GPIO_Init(GPIOF,  &GPIO);IO初始化函数

4)GPIO_Write(GPIOF,  0XF73F); IO操作函数

5)GPIO_Reset(GPIOF,  GPIO_Pin_6 |  GPIO_Pin_7 | GPIO_Pin_8 |  GPIO_Pin_9 | GPIO_Pin_10); IO操作函数

下面我就来详细说说每个库函数是干嘛的,我们该怎么用。先看第一个,在库函数里面他是如下先表示的:

typedef  struct 

{

Uint16_t  GPIO_Pin;

GPIOSpeed_TypeDef  GPIO_Speed;

GPIOMode_TypeDef  GPIO_Mode;

}GPIO_InitTypeDef;  结构体里的第一个代表是每一个管脚我们填的参数是GPIO_Pin_0 ~ GPIO_Pin_15 或者GPIO_Pin_All;记得每次初始化的时候只能写一个,要初始化多个请参考GPIO_Pin_0 | GPIO_Pin_1;我们把这个结构体又重新定了一个名字叫GPIO;紧接着我们就要给结构体里填东西了 

GPIO.GPIO_Pin  =  GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 |  GPIO_Pin_9 | GPIO_Pin_10;  //初始化6,7,8,9,10管脚

GPIO.GPIO_Mode = GPIO_Mode_Out_PP; //设置IO口为推挽输出

GPIO.GPIO_Speed = GPIO_Speed_50MHz; //设置IO响应速度为 50MHZ;

紧接着初始化时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,  ENABLE);//使能F组IO时钟 设置时钟为72MHZ

再接着初始化IO  GPIO_Init(GPIOF,  &GPIO); &GPIO就是我们定义的结构体;

下面我们看看程序如何编写的:

#include “stm32f10x.h”

void LED_GPIO_Init(void) {

GPIO_InitTypeDef GPIO;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,  ENABLE);

GPIO.GPIO_Pin = GPIO_Pin_6 |  GPIO_Pin_7 | GPIO_Pin_8 |  GPIO_Pin_9 | GPIO_Pin_10;

GPIO.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO);

GPIO_Write(GPIOF, 0XFFFF);

}

int main (void) {

LED_GPIO_Init();

while (1) {

GPIO_ResetBits(GPIOF, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8  | GPIO_Pin_9 | GPIO_Pin_10 );

}

}

烧写到开发板上,是不是发现5个灯亮了起来。

其中还有俩个GPIO_Write();跟GPIO_ResetBits();函数,大家看看具体写的参数也应该知道啥意思了,我就不多说了。

2.跑马灯

如果小灯点亮起来,那么我们让小灯有点动作,也是初学者常做的跑马灯了,前面都能看懂的话,我就直接上程序有新的东西我会指出的

#include "stm32f10x.h"

void LED_GPIO_Init(void) {

GPIO_InitTypeDef GPIO;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,  ENABLE);

GPIO.GPIO_Pin = GPIO_Pin_6 |  GPIO_Pin_7 | GPIO_Pin_8 |  GPIO_Pin_9 | GPIO_Pin_10;

GPIO.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO);

GPIO_Write(GPIOF, 0XFFFF);

}

void delay(uint32_t counter) {

while (counter --);

}

int main (void) {

int i;

LED_GPIO_Init();

while (1) {

for (i = 0; i < 5; i ++) {

switch (i) {

case 0: GPIO_ResetBits(GPIOF, GPIO_Pin_6);   break;

case 1: GPIO_ResetBits(GPIOF, GPIO_Pin_7);  

break;

case 2: GPIO_ResetBits(GPIOF, GPIO_Pin_8);   break;

case 3: GPIO_ResetBits(GPIOF, GPIO_Pin_9);   break;

case 4: GPIO_ResetBits(GPIOF, GPIO_Pin_10);  break;

}

delay(0x000fffff);

GPIO_Write(GPIOF, 0XFFFF);

}

}

}

里面也没有啥新鲜的东西,玩过51或者AVR的人这里看看就是一些C语言的操作,其实学习ARM裸机开发跟学习51差不多,因为目前都不需要我们直接操作寄存器,这样显得方便很多

3.呼吸灯

写呼吸灯之前我们先要了解一个概念叫做PWM,什么是PWM呢?上百度去查叫做脉冲宽度调制,说的好高打上看不懂,啊是?下面我找了一张图片,相信大家就能明白了

了解一个概念:占空比=高电平所占时间/周期T。我们就是通过控制占空比来控制的灯亮灭情况,看起来就像人在呼吸的样子。程序里该如何实现呢?我们整定一个固定的周期,然后让高低电平延时的时间之和跟这个周期相等就好了,下面也直接上程序吧

#include "stm32f10x.h"

void LED_GPIO_Init(void) {

GPIO_InitTypeDef GPIO;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);

GPIO.GPIO_Pin = GPIO_Pin_6;

GPIO.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO);

GPIO_Write(GPIOF, 0XFFFF);

}

void delay(uint32_t counter) {

while (counter --);

int main (void) {

int i, b;

LED_GPIO_Init();

b = 20000;

while (1) {

for (i = 0; i < b; i ++) {

GPIO_ResetBits(GPIOF, GPIO_Pin_6);  

delay(b - i);

GPIO_SetBits(GPIOF, GPIO_Pin_6);

delay(i);

}

for (i = 0; i < b; i++) {

GPIO_ResetBits(GPIOF, GPIO_Pin_6);  

delay(i);

GPIO_SetBits(GPIOF, GPIO_Pin_6);

delay(b - i);

}

delay(100);

}

}

烧写到板子上面看到灯的变化没有?如果看到了,那么LED的操作就到这里了,这也是GPIO的基本操作,掌握好了之后,就可以驱动

喇叭,继电器等一些常用的外设了。再者PWM是STM32自带的一个功能,我们现在是模拟PWM,等到时候直接操作STM32的PWM的时候就比这个更加的方便了。

最后我说下,我用的是MDK开发的,至于ARM的工程模版的建立,在以后的学习的过程中我会专门写一篇来介绍ARM工程模版的建立,方便我们后续的开发。

编者水平有限,属于初学者,有不到之处还请海涵,如果出现问题,直接加我QQ,上面有我的QQ号码。同时也欢迎大家一起来讨论学习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32学习笔记一(LED,跑马灯,呼吸灯) 的相关文章

  • Linux 网络编程2 TCP并发服务器

    Linux 网络编程学习 TCP IP网络编程2 TCP多线程服务器TCP多进程服务器 在前面TCP网络编程代码的基础上进行改造 xff0c 实现并发服务器功能 TCP多线程服务器 实现功能 xff1a server端可以绑定在任意IP端s
  • HTTP Digest authentication

    什么是摘要认证 摘要认证 xff08 Digest authentication xff09 是一个简单的认证机制 xff0c 最初是为HTTP协议开发的 xff0c 因而也常叫做HTTP摘要 xff0c 在RFC2617中描述 其身份验证
  • 简单的netfilter hook函数注册以及内核链表的使用

    include lt linux netfilter h gt include lt linux init h gt include lt linux module h gt include lt linux netfilter ipv4
  • 详述GPS原理及RTK技术应用

    完整的PPT文档在这里 xff1a 详述GPS原理及RTK技术应用 1 GPS概述 1 1定义 全球定位系统GPS xff08 Global Position System xff09 xff0c 全称为NAVSTAR GPS xff08
  • PHP HTTP Digest校验

    PHP作为客户端进行HTTP Digest校验 span class token comment 请求方法 span span class token variable username span span class token oper
  • Http Digest认证协议

    其认证的基本框架为挑战认证的结构 xff0c 如下图所示 xff1a xfeff xfeff 1 客户端希望取到服务器上的某个资源 xff0c 向服务器发送Get请求 2 服务器收到客户端的请求后 xff0c 发现这个资源需要认证信息 xf
  • Postman 安装

    Postman 的下载安装 Postman是一个用于构建和使用API的API平台 xff08 接口的调试工具 xff09 选择对应的系统和版本进行下载 https github com hlmd Postman cn 这里我的电脑是wind
  • 【安卓自定义控件系列】自绘控件打造界面超炫功能超强的圆形进度条

    在前面我们讲过了安卓自定义控件三种方式中的组合控件 xff0c 现在我们来讲解一下通过自绘的方式来实现自定义控件 xff0c 本博客将以自定义圆形进度条为例向大家讲解自定义控件的知识 xff0c 首先来看一下效果图吧 xff0c 这个是本人
  • Linux网络编程3——多进/线程并发服务器

    视频链接 黑马程序员 Linux网络编程 哔哩哔哩 bilibili https www bilibili com video BV1iJ411S7UA p 61 37 目录 一 高并发服务器 1 1 图示 1 2 分类 二 多进程并发服务
  • http请求头和响应头

    文章目录 参考HTTP通用标头Cache ControlConnectionDatePragmaTrailerTransfer EncodingUpgradeViaWarning 请求头AcceptAccept RangesAccept E
  • C++如何使用libcurl发送post请求的三种content-type的封装

    作者 xff1a 虚坏叔叔 博客 xff1a https xuhss com 早餐店不会开到晚上 xff0c 想吃的人早就来了 xff01 x1f604 C 43 43 如何使用libcurl发送post请求的三种content type的
  • 开源四轴飞行器CC3D的稳定模式和PID算法简介

    本文主要介绍一下CC3D的两大飞行模式的原理 xff1a 1 Rate 2 Attitude 以及PID的基本原理 至于AxisLock模式及Manual xff0c 日后续说 笔者是CC3D开源飞控入门玩家 xff0c 遇到过不少磕磕碰碰
  • 了解git分支和版本管理

    0 Git分支和标签的命名规范 1 分支 dev test pre pro 即master 2 标签 Tag格式 xff1a 主版本号 次版本号 修订号 类型标签 xff0c 其中类型标签可为 xff1a alpha beta rc r T
  • ubuntu下解决高并发socket最大连接数限制,tcp默认1024个连接

    nux系统默认ulimit为1024个访问 用户最多可开启的程序数目 一般一个端口 xff08 即一个进程 xff09 的最高连接为2的16次方65536 通过这个命令 ulimit n 可以看到默认值为1024 查看全局文件句柄数限制 系
  • Linux下实现Post方式

    首先了解HTTP协议各字段的含义 xff0c 以下是部分较好的归纳 xff1a HTTP一个HTTP请求报文由请求行 xff08 request line xff09 请求头部 xff08 header xff09 空行和请求数据4个部分组
  • vins中的坐标系变换及g2r函数

    slam中经常会需要表示一个刚体的位姿 例如imu的位姿 xff0c 相机的位姿 首先我们需要在一个刚体上架上一个坐标系 这个坐标系为本体坐标系 怎么架一个坐标系 xff1f imu本身就有规定其本身的x y z轴的方向 相机一般认为 xf
  • yolo_v3安装试运行小记

    github源代码 xff1a https github com qqwweee keras yolo3 Cuda下载地址 xff1a https developer nvidia com cuda toolkit archive Cudn
  • pytorch安装使用

    pytorch官网 xff1a https pytorch org get started locally conda添加清华源 xff1a conda config add channels https mirrors tuna tsin
  • ORB_SLAM3初试

    源码地址 xff1a orb salm3 github 论文地址 orb slam3 paper ORB SLAM3提供了单目 xff0c 双目 xff0c rgbd 以及各自结合IMU的数据分析实现 demo运行效果展示 xff1a 在不
  • vins-fusion代码解读[五] imu在vins里的理解

    SLAM新手 xff0c 欢迎讨论 IMU作用 vins中 xff0c IMU只读取IMU六轴的信息 xff0c 3轴线加速度 xff08 加速度计 xff09 和3轴角速度 xff08 陀螺仪 xff09 通过对陀螺仪的一次积分 xff0

随机推荐

  • Gazebo仿真学习——2.为Gazebo中的机器人添加实用插件

    Gazebo plugins in ROS 1 要了解2 插件类型3 添加一个ModelPlugin4 添加一个SensorPlugin5 gazebo plugins中的所有可用插件5 1 Camera5 2 GPU Laser xff0
  • 一款直播电视接口分析

    一 初步了解 最近对一款网络电视app进行分析 xff0c 要求是找到其访问直播源的接口 xff0c 初次打开apk xff0c 先做一个简单的了解 xff0c 并没有加固等处理 xff0c 只是对代码做了混淆处理 我们目的是找到其访问直播
  • android串口通讯

    一 配置 1 下载文件 https github com cepr android serialport api 2 复制android serialport api文件夹至app src main java 3 复制jni文件至app s
  • boost库介绍以及使用

    C 43 43 boost库介绍以及使用 一 什么是boost库 boost 库是一个优秀的 xff0c 可移植的 xff0c 开源的 C 43 43 库 xff0c 它是由 C 43 43 标准委员会发起的 xff0c 其中一些内容已经成
  • 内存映射文件

    内存映射文件 本文给出了一种方便实用的解决大文件的读取 存储等处理的方法 xff0c 并结合相关程序代码对具体的实现过程进行了介绍 引言 文件操作是应用程序最为基本的功能之一 xff0c Win32 API和MFC均提供有支持文件处理的函数
  • 如何在Eclipse中使用Ruby开发工具(RDT)插件进行Ruby开发

    一 为什么使用Ruby xff1f 现在 xff0c 为什么众多的Java开发者都关注Ruby xff1f Ruby xff0c 是10年以前在日本创建的一种通用目的脚本语言 xff0c 这是一种纯面向对象的语言 不同于 Java技术 xf
  • Open eyes in your life

    读到几个故事 xff0c 希望和大家分享 一 成功无捷径 Be proactive 一个青年职员平时工作懒懒散散 xff0c 在转正前一个月他问老板 xff1a 如果我兢兢业业工作一个月 xff0c 我能转正吗 xff1f 老板答道 xff
  • Ruby菜鸟必读http://blog.csdn.net/leasun/archive/2004/06/16/9836.aspx

    作者 xff1a William Djaja Tjokroaminata 目录 资源 1 利用警告信息 2 交互式命令解释器 xff08 Interactive shell xff09 3 联机文档 4 Class method 5 从字符
  • 毕业生收入最高的前30所大学排行榜

    毕业生收入最高的前30所大学排行榜 1 北大 123023 2 清华 118712 3 北邮 98712 4 中科大 87623 5 西电 82312 6 南京大学 78620 7 北理工 76228 8 外交学院 75667 9 国际关系
  • 世界500强面试题(情商部分)

    情商 xff08 1 xff09 1 什么书中毛病最多 xff1f 2 为什么好马不吃回头草 xff1f 3 什么东西说 父亲 是不会相碰 xff0c 叫 爸爸 时却会碰到两次 xff1f 4 农夫养10头牛 xff0c 只有19只角 xf
  • 苏浙差距!江苏经济何以难敌浙江http://bbs.icxo.com/dispbbs.asp?boardID=1894&ID=100323&page=1

    进入21世纪 xff0c 江苏经济虽然也以高于全国平均速度在增长 xff0c 但以民间资本为主的浙江经济则以高于江苏经济增长速度在发展 更为引人注目的是 xff0c 2004年下半年起 xff0c 依靠外力和政府强势推动的江苏出现了边际生产
  • 公司注册流程

    项目 xff1a 首先你要明白经商成功与否的关键在于是否有一个好的项目 xff0c 而不在于没有本钱 xff0c 怎么找到一个好项目 这个因人而异 xff0c 因地而异 xff0c 不能作具体讨论 基本上要根据你自身的综合的特点来选择行业和
  • 安卓高级xml布局(一)高级输入框EditText设计

    安卓高级xml布局 xff08 一 xff09 高级输入框EditText设计 转载请注明来源 代码连接 http download csdn net detail androidmsky 9274037 欢迎加安卓开发交流群 xff1a
  • SIP协议详解

    SIP协议基本介绍 背景介绍 Internet的许多应用都需要建立和管理一个会话 xff0c 会话在这里的含义是在参与者之间的数据的交换 由于考虑到参与者的实际情况 xff0c 这些应用的实现往往是很复杂的 xff1a 参与者可能是在代理间
  • STL容器的适用情况(转)

    原文 xff1a http hsw625728 blog 163 com blog static 3957072820091116114655254 vector 典型的序列容器 xff0c C 43 43 标准严格要求次容器的实现内存必须
  • 嵌入式STM32入门之STM32中断——点灯实验、串口通信

    STM32中断实验 一 前言二 实验要求三 中断介绍四 CuBe实现中断点灯 xff08 1 xff09 新建工程 xff08 2 xff09 设置管脚 xff08 3 xff09 设置NVIC xff08 4 xff09 配置中断优先级
  • 制作个人网站 之 人生进度条

    来源 xff1a 仿照 uTools里的人生进度条插件用页面的形式写出 目的 xff1a 做个人网站的目的就是把看到的变成自己实现的案例 这些值由后台数据库获取 这里写死了 你的名字 你打算活到几岁 你的生日 时钟为罗盘时钟 在jq插件网找
  • 从零入门激光SLAM(六)——ROS常用工具箱

    大家好呀 xff0c 我是一个SLAM方向的在读博士 xff0c 深知SLAM学习过程一路走来的坎坷 xff0c 也十分感谢各位大佬的优质文章和源码 随着知识的越来越多 xff0c 越来越细 xff0c 我准备整理一个自己的激光SLAM学习
  • STM32串口收发处理

    STM32串口收发 STM32的串口接收和发送方式都有三种情况 xff0c 即轮询 中断和DMA xff0c 俩俩组合便有9种可能的组合 下面挑出其中三种收发方式进行研究 xff0c 以及优缺点比较 一 中断接收 轮询发送 xff0c 无缓
  • STM32学习笔记一(LED,跑马灯,呼吸灯)

    本人是初学者 xff0c 水平有限 xff0c 写个简单的学习笔记方便大家参考 xff0c 同时也方便自己查缺补漏 STM32学习一 1 点亮板上的LED小灯 首先 xff0c 我们在点灯之前还要看看LED的硬件连接 看到硬件电路后 xff