STM32入门

STM32入门

意法半导体公司推出STM32芯片。

只需动手。

第一步安装开发环境。

STM32CubeIDE

点灯大师

1.新建工程

File -> New -> STM32 Project

选择自己的开发版型号,输入项目名称,创建一个STM32工程。

在这里插入图片描述

点亮红色小灯的引脚为PB0(不了解的情况下,需要先阅读该开发板的开发手册如下图)

在这里插入图片描述

鼠标左键点击后将模式改为GPIO_OutPut模式。鼠标右键添加用户标签为LED_RED。

  • STM32控制PA7的方式为推挽输出(Output Push Pull)

按住ctrl+s保存,自动跳转到main.c文件中

方式一:找到mian()函数程序入口,在while(1)括号内添加点灯代码,后运行。

HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);

​ 方式二:

在图形界面

Pinout & Configuration -> System Core -> GPIO -> 点击PB0 ->将GPIO output level 改为 high -> ctrl +s 保存 直接运行

  • 运行需要使用ST-LINK将开发板连接到电脑上。

控制小灯的亮灭

1.控制程序延后执行,单位ms(毫秒)

HAL_Delay(1000);

2.读取按键此时的电频状态

HAL_GPIO_ReadPin(KEY_GPIO_Pin,KEY1_Pin)

HAL_GPIO_ReadPin返回值为GPIO_PinState,即

typedef enum
{
  GPIO_PIN_RESET = 0u,
  GPIO_PIN_SET
} GPIO_PinState;

3.按键的浮空输入模式Nopushup -No pushDown(GPIO八大模式之一)以及上拉操作的实现

将此GPIO口处于一个高阻态的状态下,相当于芯片内部有一个很大的电阻,此时PB12处如果接的是上拉电源,则芯片读取到的PB12为高电平上拉操作实现方法:使用电源将GPIO口处的电平拉高)

在这里插入图片描述

  • 注意:上拉电源需要接一个电阻,此电阻称为上拉电阻,上拉也被称为加个上拉电阻。此电阻作用有四个作用:
  • 确定逻辑电平:在数字电路中,某些引脚如果悬空(未连接),其逻辑电平可能不确定,容易受到外界噪声干扰,导致信号不稳定。通过上拉电阻,可以将引脚拉到一个确定的逻辑高电平(比如Vcc),避免悬空状态。
  • 确保输入稳定:对于某些输入引脚,如果直接悬空,输入信号可能会因为噪声等干扰产生不确定性。上拉电阻提供了一个稳定的路径,将输入电平维持在高电平,确保输入状态稳定。
  • 与开漏(open-drain)电路配合:在一些情况下(如I²C总线),设备的输出引脚可能是开漏(open-drain)或开集电极(open-collector)结构。这类输出电路只能拉低电平,无法拉高。此时,上拉电阻用于提供逻辑高电平,当设备不主动拉低时,电阻将输出引脚拉到高电平。
  • 限制电流:上拉电阻还能限制电流的大小,防止短路时电流过大对电路造成损坏。

当KEY1按下导线接地(GND),此时芯片读取到的PB12为低电平

在这里插入图片描述

下拉操作:

将3.3V电源与GND进行交换就得到了下拉电路

在这里插入图片描述

此时当KEY1断开时,PB12与地线相连接,此时芯片读取到的PB12为低电平,当KEY1按下时,PB12与3.3V电源相连接,且设置了PB12为浮空输出状态,PB12处的电阻极大,此时芯片读取到的PB12则为高电平,与上拉正好相反。

此下拉电阻的作用:

  • 确定逻辑电平:当输入引脚没有接入信号(悬空)时,可能会处于不确定状态,容易受到噪声或干扰。下拉电阻可以确保在引脚未被主动驱动时,将其逻辑电平拉到低电平(通常为0V),从而避免悬空状态。

  • 防止浮动:在一些电路中,如果输入端悬空,可能会随机捕获干扰信号,导致逻辑状态漂移。通过下拉电阻,可以避免输入端在没有信号输入时浮动,确保引脚在没有外部驱动时处于稳定的低电平。

  • 与开路结构配合:在某些应用场景中,电路可能只负责拉高电平,而不主动拉低(例如开路集电极或开漏输出)。在这种情况下,下拉电阻可以确保当输出引脚未被驱动时,引脚被拉到低电平。

  • 提供明确的默认状态:下拉电阻可以为电路中的输入或输出引脚提供一个明确的默认状态,防止其在未连接或未驱动时进入未知状态。这在一些逻辑电路和输入按钮设计中尤为重要。

需要达到的能力:看到逻辑电路知道其是上拉操作还是下拉操作,什么状态下开关是松开,什么时候是按下。

如:看下图

在这里插入图片描述

可知,这是一个上拉操作的电路图,未按下KEY1时处于高电平GPIO_PIN_SET,按下时处于低电平(GPIO_PIN_RESET)

下图可知KEY2是一个不是上拉也不是下拉的电路图,当KEY2按下时没有电平的改变。此时你就疑惑了,这种按键如何检测其按下与否。下面介绍GPIO八大模式之一的上拉输入模式,

需要在图形界面Pinout & Configuration -> System Core -> GPIO -> 点击PB13 ->将GPIO Pull-up/Pull-down 改为 Pull-up -> ctrl +s 保存

更改成功后就与上面相同了。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c8a53a845f074f709dcd47db7053a29a.png
)

4.翻转小灯状态

HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);

每执行一次,会改变小灯的状态在GPIO_PIN_SET与GPIO_PIN_RET之间转换。

5.阅读下面代码,理解其逻辑

if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)==GPIO_PIN_RESET) {
    HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET); 	 		
}else {
    HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
}

代码逻辑:当读取KEY1按下时(低电平RESET)将小灯点亮),当KEY1抬起时小灯熄灭。

在这里插入图片描述

代码二:

if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin)== GPIO_PIN_RESET){
    HAL_Delay(10);

    if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin)== GPIO_PIN_RESET){
		HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
        while(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin)== GPIO_PIN_RESET){}
	 }
}

代码逻辑:

key为上拉操作,只有当key2按下时检测到低电平,延迟10ms(此区间为波动较大可软件消抖)后再次读取到低电平,就将LED_GREEN的状态改变,改变后,key2依然处于低电平,死等,等待到该状态结束。直到按键松开,循环才会结束,代码才能继续执行。
RESET){}
}
}


代码逻辑:

key为上拉操作,只有当key2按下时检测到低电平,延迟10ms(此区间为波动较大可软件消抖)后再次读取到低电平,就将LED_GREEN的状态改变,改变后,key2依然处于低电平,死等,等待到该状态结束。直到按键松开,循环才会结束,代码才能继续执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值