【学习记录】野火stm32学习记录(一)GPIO
观看的视频:野火-视频链接 https://www.bilibili.com/video/BV18X4y1M763
什么是GPIO?
GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
可以通过控制GPIO引脚的电平变化,达到正常使用的目的。
寄存器编程 要学会使用STM32使用手册和数据手册。
STM32F103ZET6结构图:
F103GPIO的内部结构图:
TTL肖特基触发器:将连续的信号变为离散的信号。
LED灯原理图:
keil环境配置步骤:
1.新建一个工程,找到对应的开发版芯片。此次使用的是STM32F103ZET6。
2.配置keil setting 见图片
3.在Source Group 里面添加一个主程序,main.c文件。双击Source Group即可配置。
4.配置C语言运行环境。
5.编写一个main函数。
int main(void){}
点击编译无错误。
总线架构:总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。
总线组织形式的优势:通过总线的形式,可以很好地将各种外设分离开,可以独立的将各种外设来控制它的使能与否。
时钟:通过控制时钟,来控制外设使能与否。没有外设时钟,就相当于失能。控制时钟就是控制外设。
软件开发步骤:
1. 根据此开发板的LED原理图了解到要控制PB5和PE5,使能GPIOB和GPIOE的外设时钟。使能外设时钟:知道寄存器的地址——APB2外设时钟使能寄存器地址。
RCC(复位和时钟控制)外设基地址:0x4002 1000
偏移地址:0x18
APB2外设时钟使能寄存器地址=起始地址+偏移地址。
2.选择输出模式,并查阅手册进行端口配置
LED需要设置的工作模式是输出模式。有开漏输出和推挽输出。对于开漏输出,输出一个高电平比较麻烦,选用推挽输出。
通过配置表头的寄存器可以配置推挽输出。
GPIOB外设基地址:0x4001 0C00
端口配置低寄存器(CRL)偏移地址:0x00
端口输出数据寄存器(ODR)偏移地址:0x0C
#define GPIOB_CLK (*(volatile unsigned int *)(0x40021000+0x18))
#define GPIOB_CRL (*(volatile unsigned int *)(0x40010C00))
#define GPIOB_ODC (*(volatile unsigned int *)(0x40010C00+0x0C))
int main(void)
{//1.使能GPIOB外设时钟GPIOB_CLK |=(1<<3);//2.GPIOB配置推挽输出模式GPIOB_CRL &=~(0xf<<(4*5));//清除低四位寄存器GPIOB_CRL |=(2<<(4*5));GPIOB_ODC &=~(0x1<<(1*5));//清除低1位寄存器GPIOB_ODC |=(1<<5);}
通过注释GPIOB_ODC |=(1<<5);这行代码,可以使灯亮起。
圈2中选择自己的调试器。
STM32编程方式存在寄存器编程和库编程两种,寄存器编程存在以下缺点:1、代码可读性太差,如果是一大堆寄存器的编程代码,不写注释,很难读懂;2、二次开发难度大;3、每次写程序都要查手册。
当熟练运用后,可以将寄存器编程和库编程组合起来使用。
【学习记录】野火stm32学习记录(一)GPIO相关推荐
- 野火STM32学习笔记
开始进入固件库编程 学习原因即优缺点 固件库的出现让STM32的开发难度大大下降,它通过库文件的封装,把众多的内存元整合为一个整体,在我们想要操作某一位寄存器时只要调用它所在的固件库就可以.缺点是不同 ...
- 野火STM32学习笔记一、固件库文件分析
STM32固件库文件分析 汇编编写的启动文件 startup_stm32f10x_hd.s: 设置堆栈指针.设置PC指针.初始化中断向量表.配置系统时钟.调用C库函数main最终去到C的世界 时钟配置 ...
- 野火STM32学习(7)
编写GPIO初始化结构体和初始化函数 stm32f4xx_gpio.h /* 端口模式 */ typedef enum{GPIO_Mode_IN = 0x00,GPIO_Mode_OUT = 0x01 ...
- 野火STM32学习(6)
编写置位/复位函数 #ifndef __STM32F4XX_GPIO_H #define __STM32F4XX_GPIO_H#include "stm32f4xx.h"#defi ...
- stm32单片机c语言入门 pdf,STM32学习笔记(初学者快速入门).pdf
STM32 学习笔记 从51 开始,单片机玩了很长时间了,有51,PIC,AVR 等等,早就想跟潮 流玩玩ARM ,但一直没有开始,原因不知道玩了ARM 可以做什么(对我自 己而言).如果为学习而学习 ...
- STM32学习之使用TFTLCD
前言 终于到了代码部分, 前边的所有知识铺垫都是为了这部分的代码,能得心应手,其实我个人认为,原子哥的驱动代码已经写的很好很完善了,所以这部分主要是学习原子哥的代码怎么用,我手里刚好也有一个 原子哥 ...
- STM32学习之TFTLCD
前言 之前的STM32博客学习了从0新建工程,C语言知识复习,总线时钟等基础知识,现在根据手册开始正式的开发项目,本篇博客主要是理解文档中的TFTLCD部分的学习 学习资料来自:STM32F407最小 ...
- STM32学习之FSMC
前言 上一篇介绍了TFTLCD的基础知识,这一篇来看看,FSMC的基本原理. 学习资料来自:STM32F407最小系统板开发指南-库函数版本_V1.1.pdf 正点原子,感谢原子哥的开源奉献 正点原子 ...
- STM32学习记录——烟雾传感器的使用
文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 总结 前言 这次记录一下烟雾传感器的学习,由于烟雾传感器的资料比较杂,算法比较多,对我来说也比较难,所以我的代码中算法部分是不太具有参考价值, ...
最新文章
- 如何区分abcd类地址_IP地址中A类、B类、C类地址的区别
- 【数据结构】哈夫曼树与哈夫曼编码
- 树形dp-CF-337D. Book of Evil
- android 自定义listview 多列,android listview的多列模版实例代码
- Spark Mllib里相似度度量(基于余弦相似度计算不同用户之间相似性)(图文详解)...
- oracle数据库应用中实现汉字“同音”查询(转)
- iOS的音频文件的格式转换
- 一、Java编程环境
- RS232串口接线图
- 微信双开方法windows Mac iOS
- WiFi偏门协议(四):增强的传输机制802.11aa
- 计算机程序员简历基本技能,应聘程序员的十大必备技能
- Oracle 几种更新(Update语句)查询的方法
- 用 Bitcron 搭博客:你只管写作,它负责呈现
- 这些管理学定律你知多少?
- 个人解决win7未识别的网络
- 蓝海卓越计费管理系统 debug.php 远程命令执行漏洞
- 常用JavaScript库
- 目前所有的ANN神经网络算法大全
- Qt+webservice的多线程实现