STM32F103mini教程学习总结与心得(一)
关注同名微信公众号“混沌无形”,有趣好文!
1.引脚是否兼容5V的判断:引脚表中PF表示5V,原理图中有ADC的引脚为3.3V
2.PT:容忍5V,没有PT标示,就不能
3. 每组IO口含下面7个寄存器。7个寄存器,一共可以控制一组GPIO的16个IO口
- GPIOx_CRL :端口配置低寄存器
- GPIOx_CRH:端口配置高寄存器
控制着每个IO的模式和输出速率
- GPIOx_IDR:端口输入寄存器
- GPIOx_ODR:端口输出寄存器
- GPIOx_BSRR:端口位设置/清除寄存器
- GPIOx_BRR :端口位清除寄存器
- GPIOx_LCKR:端口配置锁存寄存器
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_Out_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出
详细见点击打开链接
4.新建头文件:
#ifndef _LED_H
#define _LED_H
内容
#endif
5.ifdef条件编译:满足一定条件,编译一组语句,不满足时,编译另一组
#ifdef 标识符(一般已经用#define定义了)
程序段1
#else
程序段2
#endif
或者:
#ifdef 标识符(一般已经用#define定义了)
程序段1
#endif
6.GPIO初始化实例(通过操作CRH和CRL寄存器来配置)
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);//根据设定参数配置 GPIO
7.读取IO的电平状态-IDR
在固件库中操作 IDR 寄存器读取 IO 端口数据是通过 GPIO_ReadInputDataBit 函数实现的:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
比如读 GPIOA.5 的电平状态,方法是:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);
返回值是 1(Bit_SET)或者 0(Bit_RESET);
8.控制IO的输出电平-ODR
在固件库中设置ODR 寄存器的值来控制 IO 口的输出状态是通过函数 GPIO_Write 来实现的:
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
该函数一般用来往一次性一个 GPIO 的多个端口设值。
9.配置BSRR寄存器——端口位设置/清除寄存器,和ODR类似(设置IO输出位)
BRR寄存器是端口位清除寄存器
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置1,输出为高
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置0,输出为低
设置 GPIOB.5 输出 1,那么方法为:
GPIO_SetBits(GPIOB, GPIO_Pin_5);
反之如果要设置 GPIOB.5 输出位 0,方法为:
GPIO_ResetBits (GPIOB, GPIO_Pin_5);
10.IO的一般操作步骤:
1) 使能 IO 口时钟。调用函数为 RCC_APB2PeriphClockCmd()。
2) 初始化 IO 参数。调用函数 GPIO_Init();
3) 操作 IO。操作 IO 的方法就是上面我们讲解的方法。
11.GPIO时钟使能函数:RCC_APB2PeriphClockCmd()
如:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能 PA,PD 端口时钟
解释:因为IO是挂在APB2上的外设,需要使能该时钟
12.位带操作(操作ODR和IDR寄存器)
#define LED0 PAout(8) // 给PA8命名为LED0
#define LED1 PDout(2) // PD2
操作:LED0 = 1;//通过位带操作控制 LED0 的引脚 PA8 输出高电平
LED0=0;//通过位带操作控制 LED0 的引脚 PA8 输出低电平
GPIO_SetBits(GPIOA, GPIO_Pin_8); //设置 GPIOA8 输出 1,等同 LED0=1;
GPIO_ResetBits (GPIOA, GPIO_Pin_8); //设置 GPIOA8 输出 0,等同 LED0=0;
GPIOA->BRR=GPIO_Pin_8; //设置 GPIOA.8 输出 1,等同 LED0=1;
GPIOA->BSRR=GPIO_Pin_8; //设置 GPIOA.8 输出 0,等同 LED0=0;
13.某个端口有多个功能,则采用下面的函数 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);// 关闭JTAG,使能SWD,可以使用SWD模式调试
14.在初始化端口的时候,对于设置为输入的IO口,不用设置IO速率
15.工程编译结束,解释以下数据意义(程序大小=编译之后的Code和RO-data之和):
Code:程序所占用的FLASH的大小
RO_data:即Read Only-data,表示已经被初始化的程序全局变量,如const类型(FALSH)
RW_data:即Read Write-data,表示已被初始化的全局变量(SRAM)
ZI-data:即Zero Init-data,表示未被初始化的全局变量(SRAM)
16.J-LINK 的JTAG和SWD仿真模式
JTAG是英文“Joint Test Action Group(联合测试行为组织)”------在线系统测试
SWD使用针脚少,高速模式下较稳定
*****将STM32的JTAG下载引脚:JTDO、JTDI、JTCK 当成普通IO口进行操作:
(1)打开复用时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,EANBLE);
(2)调用重映射函数:GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
17.例:无符号32位整型数据表示方式:unsigned int 32 (C语言标准)== uint32_t == u32;详见点击打开链接
如果喜欢的话,可以关注同名微信公众号“混沌无形”,有趣好文!
STM32F103mini教程学习总结与心得(一)相关推荐
- STM32F103mini教程学习总结与心得(五)---->通用定时器
关注同名微信公众号"混沌无形",有趣好文! 一.通用定时器的基本原理 1.三种STM32定时器区别 2.通用定时器功能特点描述 (1)STM32 的通用 TIMx (TIM2.TI ...
- STM32F103mini教程学习总结与心得(四)---->看门狗
关注同名微信公众号"混沌无形",有趣好文! 一.独立看门狗概述 1.看门狗的作用 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞, ...
- STM32F103mini教程学习总结与心得(三)---->中断
关注同名微信公众号"混沌无形",有趣好文! 1. NVIC中断优先级分组 (1)CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断 ...
- STM32F103mini教程学习总结与心得(二)---->串口通信
关注同名微信公众号"混沌无形",有趣好文! 一.串口原理 1.处理器与外部设备通信的两种方式:并行通信(速度快,占用资源多)+串行通信(反之) 2.串行通信(按照数据传送方向分类) ...
- sql要学mysql还是php,MySQL_与MSSQL对比学习MYSQL的心得(一)--基本语法,这一期主要是学习MYSQL的基本 - phpStudy...
与MSSQL对比学习MYSQL的心得(一)--基本语法 这一期主要是学习MYSQL的基本语法,陆续还会有续期的文章,敬请期待 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DE ...
- Git 个人学习笔记及心得
作为程序员如果你还不知道 Git 和 GitHub,说不过去吧,赶紧来学习一波. 一.认识GitHub Git 是个版本控制系统,说明白点就是进行代码的各种管理,比如你写错代码进行回滚啊.追寻 Bug ...
- 一站式SpringBoot for NoSQL Study Tutorial 开发教程学习手册
SpringBoot2.0 + NoSQL使用教程,项目名称:"SpringBoot2NoSQL" 项目地址: https://gitee.com/475660/SpringBoo ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)
.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图 ...
- python菜鸟教程字典-python教程菜鸟教程学习路线
python教程菜鸟教程学习路线,需要学Python 环境搭建.Python 中文编码.Python 基础语法.Python 变量类型.Python 运算符.Python 条件语句.Python 循环 ...
最新文章
- 在leangoo中如何做好需求管理(研发效能)
- python获取今年第一天_利用python获取某年中每个月的第一天和最后一天
- php 数组 添加元素、删除元素
- eoeAndroid开发者大会
- MS SQL SERVER 读取数据库中每个表的描述/注释以及表中字段/列的字段名,字段类型,字段描述/注释/说明等信息...
- ubuntu下的vim与ctags
- 强大的代码编辑工具:Nova for mac v7.3中文版
- 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
- type=button 字体大一点_CAD设计师喜欢用SHX字体的原因你知道吗?
- ubuntu下输入法突然崩溃(只能选择第一个预选词,选择其他预选词会变成数字)的解决办法
- win7 Pro 英文版添加中文语言包
- tvs二极管5.0SMDJ24CA-H ISO7637 测试报告
- java栈和队列的区别是什么意思_java中栈和队列的区别是什么?
- 【Excel VBA】银行卡信用卡卡号校验功能函数
- 拓嘉启远:拼多多行家心得评论的作用
- C#:实现数据去重算法​(附完整源码)
- 减肥产品引流推广什么渠道好?怎么推广自己的减肥产品?
- em表示什么长度单位_html 常见的长度单位”px em pt” 简介说
- 时间复杂度的三种常见表示符号
- python简单代码画皮卡丘-利用Python绘制萌萌哒的皮卡丘