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

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

混沌无形

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值