1、独立看门狗:
独立看门狗相关的库函数操作函数在文件 stm32f4xx_iwdg.c 和对应的头文件 stm32f4xx_iwdg.h 中。
**在关键字寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其
复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
无论何时,只要关键字寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新
加载到计数器中从而避免产生看门狗复位 。
在关键字寄存器(IWDG_KR)中写入 0x5555:允许访问IWDG_RG和IWDG_PLR寄存器,0xAAAA:喂狗。
**库函数来配置独立看门狗的步骤:
1)取消寄存器写保护(向 IWDG_KR 写入 0X5555)
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
2)设置独立看门狗的预分频系数和重装载值:
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值
void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值
喂狗时间:Tout=((4×2^prer) ×rlr) /40
prer 为看门狗时钟预分频值(IWDG_PR 值),rlr 为看门狗的重装载值(IWDG_RLR 的值);
3)重载计数值喂狗(向 IWDGKR 写入 0XAAAA):
IWDGReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器
4) 启动看门狗(向 IWDGKR 写入 0XCCCC):
IWDGEnable(); //使能 IWD
(正点原子的关于独立看门狗的PPT和视频讲解中,说独立看门狗的喂狗时间是:
Tout=((4×2^prer) ×rlr) /32
stm32f4库函数版本开发指南上说是:
Tout=((4×2^prer) ×rlr) /40
所以,独立看门狗喂狗时间到底是/32还是/40啊)
2,PWM输出(TIM14,通道1)
相关的函数设置在库函数文件 stm32f4xx_tim.h 和 stm32f4xx_tim.c 文件中
占空比是指高电平在一个周期之内所占的时间比率。
PWM输出配置步骤:
1)开启 TIM14 和 GPIO 时钟,配置 PF9 选择复用功能 AF9(TIM14)输出
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); //TIM14 时钟使能
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GPIOF9 复用为定时器 14
2)初始化 TIM14,设置 TIM14 的 ARR 和 PSC 等
TIMTimeBaseInit(TIM3, &TIMTimeBaseStructure); //根据指定的参数初始化 TIMx
TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值
TIMTimeBaseStructure.TIMPrescaler =psc; //设置预分频值
3)设置 TIM14_CH1 的 PWM 模式,使能 TIM14 的 CH1 输出
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
4)使能 TIM14
TIM_Cmd();
5)修改 TIM14CCR1 来控制占空比。
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare2);