STM32学习笔记

C语言语法

C语言枚举定义

//里面的变量值会自动加一,且注意每个变量后是逗号,最后一个变量后没有逗号

//GPIO_Speed_10MHz相当于一个常量可以直接赋值给int,char或者自定义类型的变量
如:int a=GPIO_Speed_10MHz;

//但是如果定义了一个枚举变量
如:GPIOSpeed_TypeDef a;
此时的a就于int定义的变量一样里面是一个不确定的值,但是给其赋值只能赋枚举里的常量值
typedef enum
{ 
  GPIO_Speed_10MHz = 1,         // 10MHZ        (01)b
  GPIO_Speed_2MHz,              // 2MHZ         (10)b
  GPIO_Speed_50MHz              // 50MHZ        (11)b
}GPIOSpeed_TypeDef;

STM32寄存器地址的理解

在计算机中,一个地址,代表一个字节(1Byte)

比如:地址0x0000 0000就占一个字节,

地址0x0000 0001也占一个字节,

地址0x0000 0002也占一个字节,

地址0x0000 000F也占一个字节,

也就是说:

0x0000 0000 - 0x0000 000F总共有16个地址,占16个字节。
STM32是32位的也就是每个完整的寄存器对应着4Byte的地址,即像GPIO的IDR和ODR两个相邻的寄存器的地址间隔是0x04。

含参数的宏定义

#define LED_B(a) if(a) \\ (\)连接符号后面不能带任何东西
						GPIO_SetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN); \
				 else   GPIO_ResetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN);

寄存器与外设的理解

ARM将32位4G内存地址中的一部分起别名方便操作,这些命名的部分就是寄存器(所以寄存器实际上就对应一段内存地址),如GPIO的寄存器(包含了GOIO的时钟,赋值,输入输出配置等寄存器),然后通指定的寄存器对GPIO外设进行操作。

#include"stm32f10x.h"

#include"stm32f10x.h"里面包含了"stm32f10x_conf.h",这样每次main函数只用引用"stm32f10x.h"就可以把各种外设的头文件也引入

GPIO输出

推挽输出
1、可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由
VSS决定。
2、推挽结构指两个三极管受两路互补的信号控制,总是在一个导通的时候
另外一个截止,优点开关效率效率高,电流大,驱动能力强。
3、输出高电平时,电流输出到负载,叫灌电流,可以理解成推,输出低电
平时,负载电流流向芯片,叫拉电流,即挽。

开漏输出
1、只能输出低电平,不能输出高电平。
2、如果要输出高电平,则需要外接上拉。
3、开漏输出具有“线与”功能,一个为低,全部为低,多用于I2C和
SMBUS总线

位带操作

//GPIOB_ODR_Addr寄存器地址,n要操作的是寄存器的第几位
#define GPIOB_ODR_Addr        (GPIOB_BASE+0X0C)
#define PBout(n)              *(unsigned int *)((GPIOB_ODR_Addr & 0xf0000000)+0x02000000+ ((GPIOB_ODR_Addr & 0x00ffffff)<<5)+(n<<2))

系统时钟配置


红色为默认的时钟配置路线:通过高速外部时钟时钟(8M)经过PLL9倍频后(72M),选择输出的PLLCLK时钟(72M)为系统时钟对后续的外设等时钟进行配置。(最多可以通过自定义超频到128M)
APB1为低速总线时钟为二分频36M
AP2为高速总线时钟为一分频72M

EXTI中断/事件

NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。

EXTI外部中断/事件控制器,上面主要包括GPIOA-G的中断
在这里插入图片描述

产生中断目的是把输入信号输入到 NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级的。

中断属于复用功能,实际上EXTI的配置是在AFIO上
在这里插入图片描述

配置按键的输入中断:
EXTI0-15对应的就是GPIOA-G的0-15号引脚
NVIC里要设定中断优先级并且使能总中断
初始化中断端

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值