Stm32CubeMX学习笔记 -- GPIO、定时器中断、PWM、ADC、串口

本文内容结合个人开发经验和其他博主的见解,供个人学习使用。
摘要由CSDN通过智能技术生成

本文内容结合个人开发经验和其他博主的见解,供个人学习使用

----待更新----

系统

选择芯片

配置时钟、调试模式√

1.设置使用外部高速时钟源(8M晶振)
在这里插入图片描述如果使用RTC时钟,要使能LSE。
说明:
BYPASS Clock Source(旁路时钟源)
Crystal/Ceramic Resonator(石英/陶瓷 晶振)

2.设置时钟树为72M
修改 HCLK 的值为 72 后,输入回车,软件会自动修改所有配置
在这里插入图片描述

3.调试模式为SW模式

中断优先级NVIC√

NVIC即嵌套向量中断控制器,用于配置各种中断源的使能和失能,响应优先级。
除了在此处配置,在具体中断功能中的NVICsetting选项卡中也可以设置并自动保持同步。
在这里插入图片描述

Preemption Priority:抢占优先级
Sub Priority:子优先级(响应优先级)
数字越小表示优先级越高

在CubeMX中默认只有抢占优先级可以进行0-15的设置,响应优先级只能为0,可以自行设置中断优先级控制位分组,分配如下:

编号 分配情况 说明
0/1/2/3 4:0 16抢占优先级,0 子优先级
4 3:1 8 抢占优先级,2 子优先级
5 2:2 4 抢占优先级,4 子优先级
6 1:3 2 抢占优先级,8 子优先级
7 0:4 0 抢占优先级,16子优先级

多个中断同时响应时,抢占优先级高的会先于抢占优先级低的执行;如果抢占优先级相同,就比较响应优先级;如果响应优先级也相同,就比较它们的硬件中断编号,编号越小优先级越高。
如果在此之前还有一个响应优先级低的还在进行,那么高的响应优先级必须等待低的先进行。

生成code√

1.工程名称,路径,编译器设置
注意工程名和路径要避免使用中文
在这里插入图片描述2.代码生成设置
在这里插入图片描述

GPIO -

GPIO 8 种工作模式

GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出

1、上拉输入、下拉输入可以用来检测外部信号;例如,按键等;
2、浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的I2C、USART 的接收端;
3、普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。
普通开漏输出模式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部一个上拉电阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5V 电平。
4、对于相应的复用模式(复用输出来源片上外设),则是根据 GPIO 的复用功能来选择,如 GPIO 的引脚用作串口的输出(USART/SPI/CAN),则使用复用推挽输出模式。如果用在 I2C、SMBUS 这些需要线与功能的复用场合,就使用复用开漏模式。
5、在使用任何一种开漏模式时,都需要接上拉电阻。

业务代码

//读取电平状态
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
//设置引脚状态
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState
PinState);
//转换引脚状态
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
//锁定引脚状态
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);


//举例:
//读取PA0引脚状态
 HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
 //将PA0引脚状态改为低电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);

user lable位于main.h

外部中断

定时器

定时器中断√

1.配置定时器
在这里插入图片描述中断间隔T = (arr+1)(psc+1) / 72M
其中72M 为时钟树设置的主频

2.开启中断
高级定时器勾选update interrupt,普通定时器勾选global interrupt
这里在系统NVIC中配置也是可以的
在这里插入图片描述

3.业务代码
在主函数添加初始化代码

//__HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);//如果不想使能中断后立即进入中断,加上这一句
HAL_TIM_Base_Start_IT(&htim1);//开启定时器1中断

重写中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   
	if(htim->Instance == htim1.Instance) 
	{
   	
	
	}
}

完成!

P

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值