您的位置:首页 > 其它

1.27日学习内容-看门狗,PWM输出

2018-01-27 20:42 239 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: