打印
[其他ST产品]

stm32战舰之路

[复制链接]
楼主: hehhehee
手机看帖
扫描二维码
随时随地手机跟帖
21
hehhehee|  楼主 | 2021-12-30 14:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
hehhehee|  楼主 | 2021-12-30 14:24 | 只看该作者

使用特权

评论回复
23
hehhehee|  楼主 | 2021-12-30 14:25 | 只看该作者
五、跑马灯与蜂鸣器操作(IO作为输出控制外设方法)步骤:

1、定义配置需要的结构体 ----->GPIO_InitTypeDef   GPIO_InitStruct;

使用特权

评论回复
24
hehhehee|  楼主 | 2021-12-30 14:26 | 只看该作者
2、使能IO口时钟----->RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

使用特权

评论回复
25
hehhehee|  楼主 | 2021-12-30 14:26 | 只看该作者
3、GPIO模式配置---->GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
                                            GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                                            GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

使用特权

评论回复
26
hehhehee|  楼主 | 2021-12-30 14:27 | 只看该作者
4、初始化GPIO----->GPIO_Init(GPIOB, &GPIO_InitStruct);

使用特权

评论回复
27
hehhehee|  楼主 | 2021-12-30 14:28 | 只看该作者
六、按键(IO口作为输入控制外设)

与输出不同,这里IO口作为输入是配置模式不一样,这里是上下拉输入调用函数(GPIO_ReadIputDataBit()来读取IO电平),还有按键要分支持连续按和不支持连续按。设置一个标志位(mode)即可。

使用特权

评论回复
28
hehhehee|  楼主 | 2021-12-30 14:30 | 只看该作者
七、串口实验(IO复用功能练习)

串口配置模式对应引脚的模式配置

使用特权

评论回复
29
hehhehee|  楼主 | 2021-12-30 14:31 | 只看该作者
串口配置步骤:

1、GPIO时钟使能,复用IO口时钟使能

2、串口复位

3、GPIO模式配置

4、串口参数配置初始化

5、开启中断并初始化NVIC(需要时才用到)

6、使能串口

7、编写中断服务函数

使用特权

评论回复
30
hehhehee|  楼主 | 2021-12-30 14:32 | 只看该作者

使用特权

评论回复
31
hehhehee|  楼主 | 2021-12-30 14:33 | 只看该作者
串口框图:

使用特权

评论回复
32
hehhehee|  楼主 | 2021-12-30 14:33 | 只看该作者
八、外部中断学习

外部中断配置步骤:

1、配置IO口为输入

2、使能AFIO时钟

3、GPIO与中断线映射设置  ------>函数:void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)

4、中断线上中断初始化----------->函数:void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)

5、中断优先级配置---------------->函数:NVIC_Init(&NVIC_InitStructure);

6、编写中断服务函数。------------>中断服务函数在启动文件中找。

使用特权

评论回复
33
hehhehee|  楼主 | 2021-12-30 14:34 | 只看该作者
中断服务函数中常用到两个函数:

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);     //判断中断是否发生

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);  //清除中断标志位

使用特权

评论回复
34
hehhehee|  楼主 | 2021-12-30 14:35 | 只看该作者
在这里需要说明一下,固件库还提供了两个函数用来判断外部中断状态以及清除外部状态
标志位的函数 EXTI_GetFlagStatus 和 EXTI_ClearFlag,他们的作用和前面两个函数的作用类似。
只是在 EXTI_GetITStatus 函数中会先判断这种中断是否使能,使能了才去判断中断标志位,而
EXTI_GetFlagStatus 直接用来判断状态标志位。\

使用特权

评论回复
35
hehhehee|  楼主 | 2021-12-30 14:36 | 只看该作者
九、看门狗学习之独立看门狗和窗口看门狗

作用:为了检测和解决由软件错误引起的故障

独立看门狗框图:

使用特权

评论回复
36
hehhehee|  楼主 | 2021-12-30 14:36 | 只看该作者

使用特权

评论回复
37
hehhehee|  楼主 | 2021-12-30 14:37 | 只看该作者
开启独立看门狗的步骤

1、取消写保护,往IWDG_KR键寄存器写0x5555 函数 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

使用特权

评论回复
38
hehhehee|  楼主 | 2021-12-30 14:38 | 只看该作者
2、设置预分频系数和重装值:操作IWDG_PR和IWDG_RLR寄存器。

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);      

void IWDG_SetReload(uint16_t Reload);

独立看门狗溢出时间计算:设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间(也就是看门狗溢出时间),该时间的计算方式为:   Tout=((4×2^prer) ×rlr) /40
其中 Tout 为看门狗溢出时间(单位为 ms); prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7; rlr 为看门狗的重装载值(IWDG_RLR 的值);

使用特权

评论回复
39
hehhehee|  楼主 | 2021-12-30 14:39 | 只看该作者
3、重载计数值喂狗  --->IWDG_ReloadCounter();//向IWDG_KR寄存器写入0xAAAA操作

使用特权

评论回复
40
hehhehee|  楼主 | 2021-12-30 14:40 | 只看该作者
4、开启看门狗  -------->IWDG_Enable();//即向IWDG_KR寄存器写入0xCCCC操作

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则