关注同名微信公众号“混沌无形”,有趣好文!

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教程学习总结与心得(一)相关推荐

  1. STM32F103mini教程学习总结与心得(五)---->通用定时器

    关注同名微信公众号"混沌无形",有趣好文! 一.通用定时器的基本原理 1.三种STM32定时器区别 2.通用定时器功能特点描述 (1)STM32 的通用 TIMx (TIM2.TI ...

  2. STM32F103mini教程学习总结与心得(四)---->看门狗

    关注同名微信公众号"混沌无形",有趣好文! 一.独立看门狗概述 1.看门狗的作用 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞, ...

  3. STM32F103mini教程学习总结与心得(三)---->中断

    关注同名微信公众号"混沌无形",有趣好文! 1. NVIC中断优先级分组 (1)CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断 ...

  4. STM32F103mini教程学习总结与心得(二)---->串口通信

    关注同名微信公众号"混沌无形",有趣好文! 一.串口原理 1.处理器与外部设备通信的两种方式:并行通信(速度快,占用资源多)+串行通信(反之) 2.串行通信(按照数据传送方向分类) ...

  5. sql要学mysql还是php,MySQL_与MSSQL对比学习MYSQL的心得(一)--基本语法,这一期主要是学习MYSQL的基本 - phpStudy...

    与MSSQL对比学习MYSQL的心得(一)--基本语法 这一期主要是学习MYSQL的基本语法,陆续还会有续期的文章,敬请期待 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DE ...

  6. Git 个人学习笔记及心得

    作为程序员如果你还不知道 Git 和 GitHub,说不过去吧,赶紧来学习一波. 一.认识GitHub Git 是个版本控制系统,说明白点就是进行代码的各种管理,比如你写错代码进行回滚啊.追寻 Bug ...

  7. 一站式SpringBoot for NoSQL Study Tutorial 开发教程学习手册

    SpringBoot2.0 + NoSQL使用教程,项目名称:"SpringBoot2NoSQL" 项目地址: https://gitee.com/475660/SpringBoo ...

  8. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图 ...

  9. python菜鸟教程字典-python教程菜鸟教程学习路线

    python教程菜鸟教程学习路线,需要学Python 环境搭建.Python 中文编码.Python 基础语法.Python 变量类型.Python 运算符.Python 条件语句.Python 循环 ...

最新文章

  1. 在leangoo中如何做好需求管理(研发效能)
  2. python获取今年第一天_利用python获取某年中每个月的第一天和最后一天
  3. php 数组 添加元素、删除元素
  4. eoeAndroid开发者大会
  5. MS SQL SERVER 读取数据库中每个表的描述/注释以及表中字段/列的字段名,字段类型,字段描述/注释/说明等信息...
  6. ubuntu下的vim与ctags
  7. 强大的代码编辑工具:Nova for mac v7.3中文版
  8. 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
  9. type=button 字体大一点_CAD设计师喜欢用SHX字体的原因你知道吗?
  10. ubuntu下输入法突然崩溃(只能选择第一个预选词,选择其他预选词会变成数字)的解决办法
  11. win7 Pro 英文版添加中文语言包
  12. tvs二极管5.0SMDJ24CA-H ISO7637 测试报告
  13. java栈和队列的区别是什么意思_java中栈和队列的区别是什么?
  14. 【Excel VBA】银行卡信用卡卡号校验功能函数
  15. 拓嘉启远:拼多多行家心得评论的作用
  16. C#:实现数据去重算法​(附完整源码)
  17. 减肥产品引流推广什么渠道好?怎么推广自己的减肥产品?
  18. em表示什么长度单位_html 常见的长度单位”px em pt” 简介说
  19. 时间复杂度的三种常见表示符号
  20. python简单代码画皮卡丘-利用Python绘制萌萌哒的皮卡丘

热门文章

  1. Android + Appium 自动化测试完整的环境配置及代码详解
  2. 库,表,记录的相关操作
  3. day12(html、css)
  4. 2017年个人工作总结
  5. Win 10 +Ubuntu双系统
  6. 百度贴吧中的匿名回复,根本不是匿名,完全可以看到用户的全部IP。
  7. 关于写程序时「对数据库操作」的一些总结。
  8. 关于模糊查询时的索引问题.(了解一下,对提高代码效率非常有好处)
  9. 【Oracle】分区表中索引状态为N/A
  10. Java异常与异常处理简单使用