STM32基础(2)

本文介绍了STM32中的独立看门狗(IWDG)的原理和配置步骤,包括取消写保护、设置预分频系数和重装载值以及启动看门狗的代码实现。此外,还详细讲解了PWM输出的基础知识,提供了配置定时器14为PWM输出的代码,包括使能定时器和GPIO、设置定时器参数、初始化输出比较参数等步骤。
摘要由CSDN通过智能技术生成

目录

四.独立看门狗

独立看门狗配置步骤及代码

五.PWM输出

PWM输出步骤及代码


 

四.独立看门狗

独立看门狗原理

        看门狗( watchdog timer),是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗,(一般在程序跑飞时,不在程序正常的状态),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

独立看门狗配置步骤及代码

  • 取消写保
         IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  • 设置独立看门狗的预分频系数和重装载值
         void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); // 设置 IWDG 预分频值
        void IWDG_SetReload(uint16_t Reload); // 设置 IWDG 重装载值
  • 重载计数值喂狗
         IWDG_ReloadCounter(); // 按照 IWDG 重装载寄存器的值重装载 IWDG 计数器
  • 启动看门狗

        IWDG_Enable(); //使能 IWDG

iwdg.c
void Iwdg_Init(void)
{
	//1、 取消寄存器写保护:
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	//2、设置独立看门狗的预分频系数,确定时钟:125HZ
	IWDG_SetPrescaler(IWDG_Prescaler_256);
	//3、设置看门狗重装载值,确定溢出时间:2s
	IWDG_SetReload(250);
	//4、使能看门狗
	IWDG_Enable();
	
	IWDG_ReloadCounter();

main.c

#include "delay.h"
#include "led.h"
#include "key.h"
#include "iwdg.h"

#include "stm32f4xx.h"                  

int main()
{	
	delay_init(128);
	delay_ms(500);
	LED_Init();
	GPIO_ResetBits(GPIOA,GPIO_Pin_9);
	KEY_INIT ();
	IWDG_INIT(4, 100);
	
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0)
		{
			IWDG_ReloadCounter();
		}
	}
		
}

五.PWM输出

PWM概述

        脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制,PWM 原理如图:

        STM32F4 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。

PWM输出步骤及代码

  • 使能定时器14和相关IO口时钟。
    使能定时器14时钟:RCC_APB1PeriphClockCmd();
    使能GPIOF时钟:RCC_AHB1PeriphClockCmd ();
  • 初始化IO口为复用功能输出。函数:GPIO_Init();
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
  • GPIOF9复用映射到定时器14
    GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);
  • 初始化定时器:ARR,PSC等:TIM_TimeBaseInit();
  • 初始化输出比较参数:TIM_OC1Init();
  • 使能预装载寄存器: TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
  • 使能自动重装载的预装载寄存器允许位 TIM_ARRPreloadConfig(TIM14,ENABLE);
  • 使能定时器。TIM_Cmd();
  • 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare1();

pwm.c

#include "pwm.h"

/*
引脚说明:
LED0灯连接PF9,TIM14通道1
TIM14 -- APB1,定时器频率:84MHZ
*/

void Pwm_Led0_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
	TIM_OCInitTypeDef  TIM_OCInitStruct; 	//定时一个该结构体
	
	//开启 TIM14 和 和 GPIO时钟,配置 PF9选择复用功能 AF9 (TIM14)输出。
	//库函数使能 TIM14 时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
	//还需要使用到GPIOF9,所以也要使能该引脚 
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); 
	
	//由于使用到PF9的复用功能,利用库函数使其引脚与TIM14定时器
	GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); 
	
	GPIO_InitStruct.GPIO_Pin 	= GPIO_Pin_9; 		//GPIOF9
	GPIO_InitStruct.GPIO_Mode 	= GPIO_Mode_AF; 	//配置引脚为复用功能
	GPIO_InitStruct.GPIO_Speed 	= GPIO_Speed_50MHz; //速度 50MHz
	GPIO_InitStruct.GPIO_OType 	= GPIO_OType_PP; 	//推挽复用输出
	GPIO_InitStruct.GPIO_PuPd 	= GPIO_PuPd_UP; 	//上拉
	GPIO_Init(GPIOF,&GPIO_InitStruct); 	//初始化 PF9,用库函数寄存器

	TIM_TimeBaseStruct.TIM_Prescaler	= 84-1 ; 	//设置定时器的分频值 1MHZ
	TIM_TimeBaseStruct.TIM_Period		= 500-1; 	//设置定时器的的自动重装载的值 周期为500us
	TIM_TimeBaseStruct.TIM_CounterMode	= TIM_CounterMode_Up;//设置定时器为向上计数模式
	TIM_TimeBaseStruct.TIM_ClockDivision= TIM_CKD_DIV1;//设置定时器的时钟分频因子
	TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStruct);//初始化定时器 14
	
	TIM_OCInitStruct.TIM_OCMode			= TIM_OCMode_PWM1; 		//选择PWM的模式,选择PWM模式1
	TIM_OCInitStruct.TIM_OCPolarity 	= TIM_OCPolarity_Low; 	//输出的极性,输出是高电平还是低电平,这里选择低电平
	TIM_OCInitStruct.TIM_OutputState 	= TIM_OutputState_Enable; //用于设置输出的使能,使能PWM输出到端口
	//根据设定信息配置TIM14 OC1 -- 通道1
	TIM_OC1Init(TIM14, &TIM_OCInitStruct); 
	
	//使能预装载寄存器:
	TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); 
	//使能自动重装载的预装载寄存器允许位	
	TIM_ARRPreloadConfig(TIM14,ENABLE);

	//使能定时器。
	TIM_Cmd(TIM14, ENABLE);

}


原文链接:https://blog.csdn.net/wprpr/article/details/108034494

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值