stm32f407igh6学习笔记

发布于:2022-10-16 ⋅ 阅读:(342) ⋅ 点赞:(0)

本文将记录我的学习历程,基于rom实验室,包括各种函数的应用及硬件模块的介绍。

前言:stm32cubemx配置

stm32f407igh6 时钟树配置为12 HSE /6 x168 /2 PLLCLK /4 /2

一 点亮LED

1 原理:三个 LED 灯的引脚为 PH10,PH11,PH12。在user label 填写命名LED_B LED_G LED_R 对应引脚输出高电平点亮

2 代码:

HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET);

对应:

HAL_GPIO_WritePin(GPIOH, GPIO_PIN_12, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOH, GPIO_PIN_11, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOH, GPIO_PIN_10, GPIO_PIN_SET);

3 断点:如果我们在程序某处标志了一个断点,那么编译器走到这一处程序之前就开始“断开”,不执行;若我们继续设置了断点,则程序会在上一个“断开”的地方往下跑,直到这一处“断点”。如果想要程序不接着之前的断点处往下跑,而是只考虑这一个断点的效果,那么需要reset。

4 LED 的连线不直接连接到 stm32 引脚上,这是因为对于 stm32 来讲,引脚的输出电流能力有限,需要通过三极管来实现对电流的放大作用进而实现 LED 灯的点亮与熄灭

     

c:集电极 b:基极 e:发射极 npn:集电极流入,发射集流出;pnp:发射集流入,集电极流出。

三极管导通时工作在饱和状态,不导通时工作在截止状态;相当于一个开关, 而 B 点相当于按下开关的手,CE 点相当于开关连接的线路。当 B 点处于高电平时,开关闭合,CE 线连通;当 B 点处于低电平的时候,开关断开,CE 线路断开。

B 点电压对三级管具有控制作用,在程序未发生控制行为的时候,需要将电压控制到低电平, 保证器件不被意外触发,对于三极管来说主要为下拉电阻,之外还有上拉电阻。

从 LED 灯原理图中,当 LED_B,LED_G 和 LED_R 三个引脚不处于高电平的输出状态,那 么三极管的控制端将会被红圈圈中的下拉电阻拉为低电平,当 LED_B,LED_G 和 LED_R 处 于高电平的输出状态,通过原理图中 1kΩ与 10kΩ的分压后,三极管的基极控制端将变成 高电平,故而三级管的控制端电压将变成高电平。

GPIO 输出操作是 stm32 中最基础的操作,通过高低电平控制完成一次类似开关的控制。

二 LED闪烁

        HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_10);
        HAL_Delay(500);
        HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_11);
        HAL_Delay(500);
        HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_12);
        HAL_Delay(500);

蓝色-青色(蓝色和绿色混合)-白色(红蓝绿混合)-重灰色(红绿混合)-红色-灭

三 定时器闪烁LED

分频:时钟上不同的指针需要有不同的速度,也就是不同的频率,从而精确的表示时间, 比如秒针,分针,时针,这三者相邻的频率之比都是 60:1,即秒针每转过 60 格分针转 动 1 格,分针转动 60 格时针转动 1 格,所以分针对于秒针的分频为 60。

计数:时钟所对应的值都是与工作时间成正比的,比如秒针转动 10 格,意味着过了 10 秒,同样定时器中的计数也是和计数时间成正比的值,频率越高增长速度越快。

重载:时、分、秒的刻度都是有上限的,一个表盘最多记 12 小时,60 分钟,60 秒, 如果继续增加的话就会回到 0。同样的在定时器中也需要重载,当定时器中的计数值达到重载值时,计数值就会被清零。

时钟源处的时钟信号经过预分频寄存器TIMx_PSC,按照预分频寄存器内部的值进行分频。比如时钟源的频率为 16MHz,而预分频寄存器中设置的值为 16:1,那么通过预分频后进入定时器的时钟频率就下降到了 1MHz。(指针由时钟源的1/16MHZ计一个数变为1/1MHZ计一个数)

在已经分频后的定时器时钟驱使下,计数器寄存器TIMx_CNT 根据该时钟的频率向上计数,直到 TIMx_CNT 的值增长到与设定的自动重装载寄存器 TIMx_ARR 相等时,TIMx_CNT 被清空, 并重新从 0 开始向上计数,TIMx_CNT 增长到 TIMx_ARR 中的值后被清空时产生一个定时 中断触发信号。综上定时器触发中断的时间是由设定的 TIMx_PSC 中的分频比和 TIMx_ARR 中的自动重装载值共同决定的。

当定时器的计数值增长到重载值时,在清空计数值的同时,会触发一次定时器 中断,即定时器更新中断。只要设定好定时器的重载值,就可以保证定时器中断以固定的频率被触发。

配置时钟:Timer1,在弹出的 TIM1 Mode and Configuration 中,在 ClockSouce 的右侧下拉菜单中选中 Internal Clock(时钟源为内部时钟);在时钟树中,通过配置这个结构中各处的分频/倍频比,可以控制最后输出到各个外设的时钟。通过查阅数据手册资料,可以知道 TIM1 的时钟源来自 APB2 总线,说明 TIM1 挂载在 APB2 上,注意到在时钟树配置页面下的 APB2 Timer clocks(MHz)为 168MHz,这意味着提供给 TIM1 预分频寄存器的频率就是 168MHz。

 通过设置分频比和重载值来控制定时器的周期。对应 TIMx_PSC 寄存器的 Prescaler 项和对应 TIMx_ARR 寄存器的 Counter Period 项。(已学到文档50页)

本文含有隐藏内容,请 开通VIP 后查看