STM32F103mini教程学习总结与心得(一)

2023-05-16

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

 

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;详见点击打开链接

 

如果喜欢的话,可以关注同名微信公众号“混沌无形”,阅读更多有趣好文!

 

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

STM32F103mini教程学习总结与心得(一) 的相关文章

  • (一)SAS初识

    1 SAS常用工作窗口 结果 xff08 Result xff09 窗口 管理SAS程序的输出结果 xff1b 日志 xff08 Log xff09 窗口 记录程序的运行情况 xff1b SAS资源管理器 xff08 Explore xff
  • 2021-08-31

    二次规划求解器OOQP的基础使用 前言一 OOQP所包含参数的定义二 简单调用1 头文件2 参数设置3 进行求解4 取出计算结果 总结 前言 OOQP作为一款强大的开源凸优化库 支持C 43 43 Matlab调用 现在这里记录下其简单的使
  • Smart PLC与Wincc通过Simatic NET建立OPC通讯(1)

    有已经组态好的XDB文件可以在我的博客下载中心下载SIMATIC NET通讯 xff0c 下载完成直接导入到Simaticnet软件即可 xff0c 如下图 xff1a 下载链接 xff1a https download csdn net
  • 如何下载西门子PLC的CAD图库

    1 进入西门子下载中心 xff0c 网址如下 xff1a https www automation siemens com bilddb search aspx multipleObjectTypes 61 61 64 63 65 60 2
  • 串联电阻和并联电阻的计算方法

    注 xff1a 并联电路的电阻计算公式 1 R总 61 1 R1 43 1 R2 电阻可以无限数量的串联和并联组合连接在一起形成复杂的电阻电路 在之前的教程中 xff0c 我们学习了如何将各个电阻连接在一起形成一个系列电阻器网络或并联电阻器
  • 西门子V90 PN控制FB284块的个人理解

    FB284块的引脚定义 xff1a 1 MDI xff08 Manual Data Input xff09 称为设定值直接给定运行方式 即上位控制器直接设置目标位置 速度 加减速度后 xff0c 轴自动移动到目标位置的定位方式 MDI也是实
  • 伺服驱动

    1 什么是丝杠的导程 xff1f 伺服电机旋转一圈360度 xff0c 同时带动丝杠旋转360度 导程只是关系到丝杆转一圈 xff0c 丝杆螺母走的距离 如果配有减速机的话 xff0c 会有一个减速比 xff0c 如果减速比为1 12的话
  • 增量式编码器与绝对值编码器的区别

    增量式编码器只能记住自己走了多少步 xff0c 当然会有一个原点 在开机第一次走过原点一千 xff0c 它是不知道自己的位置在什么地方 绝对值编码器只要上电就能知道自己现在所处的位置 xff0c 绝对值编码器需要刻更多的线 xff0c 成本
  • RS422-RS485-RS232标准接线

    1 RS422标准接线 2 RS485标准接线 3 RS485全双工接线
  • C语言中关于合法的数值常量

    1 八进制常量 xff1a 开头必须是0 xff0c 且八进制是0 7之间组成的数 xff0c 例如 xff0c 029就是错误的八进制表示方式 2 十六进制常量 xff1a 0X开头 xff0c 包含字母ABCDEF xff0c 不区分大
  • C中关于“表达式必须是可修改的左值错误”的解决方式

    注意1 xff1a 1 num 10 是字符数组名 xff0c a i num指向字符常量 xff0c 字符数组名是无法修改的 2 所以可以用strcpy字符串复制功能就可以了 3 另外写成s 61 a i 也可以 4 又或者将结构体内ch
  • (二)SAS基本语法

    1 语句 SAS语言的基本单位是语句 xff0c 多条SAS语句构成一个SAS程序 xff08 SAS xff09 xff1b Libname mylib 34 c sasdata 34 语句通常由一个关键词 SAS名称 特殊字符 运算符等
  • TCP协议详解

    参考博客 在可靠的TCP网络通信中 xff0c 客户端和服务器端通信建立连接的过程可简单表述为三次握手 建立连接的阶段 和四次挥手 释放连接阶段 xff0c 下图是这两个阶段的一个完整的表述 xff1a 其状态图可以表示为 xff0c 在T
  • Ubuntu环境下python2和python3切换

    问题 xff1a Ubuntu环境下python2和python3的切换问题 环境 xff1a Ubuntu16 04 Ubuntu自带python2 xff0c 有时候需要使用pytho3 该如何切换呢 xff1f 使用 update a
  • POSIX 统一中位机(Linux)与下位机(stm32)开发

    0 POSIX简介 POSIX表示可移植操作系统接口 Portable Operating System Interface of UNIX xff0c 缩写为 POSIX xff0c POSIX标准定义了操作系统应该为应用程序提供的接口标
  • AI视频智能分析系统方案

  • NB智能燃气报警器参数及功能

  • 工厂安全智能管理解决方案

随机推荐