STM32F103常用的初始化步骤2020年2月
STM32F103 常用的初始化步骤(第一部分 2020 年 2 月) 一、GPIO 端口二、GPIO 端口 做输出做输入 1、使能 GPIO 2、初始化 IO 3、操作 IO 三、端口复用四、重映射五、NVIC 1、使能 IO1、使能 IO 和外设 2、初始化 IO2、初始化 IO (注意 ODR 寄存器可以上下拉) 3、操作 IO ReadDataBit用来读取 GPIO 的电平 PEin(4)也可以用来读 GPIO 的电平 1、使能 IO 和外设初始化部分 2、使能 AFIO 时钟NVIC_Init; 3、开启重映射 RCC_PinRemapConfig; 4、初始化 IO 主函数部分 设置中断优先级分 组 NVIC_PriorityGrou pConfig(); 串口初始化代码方式一 1、使能 IO 和 USART 2、初始化 IO 3、NVIC 初始化 4、USART 初始化 5、开启中断 USART_ITConfig; 6、使能串口 USART_; 编写中断处理函数 USART1_IRQHandler { } 串口初始化代码方式二 1、使能 IO 和 USART 2、串口复位 3、初始化 IO 4、USART 初始化 5、开启中断、NVIC 初始化 USART_ITConfig; NVIC_Init; 6、使能串口 USART_; 编写中断处理函数 USART1_IRQHandler { } 串口初始化代码方式三(推荐使用) 1、使能 IO 和 USART 2、串口复位 3、初始化 IO 4、USART 初始化 5、NVIC 初始化、开启中断 NVIC_Init; USART_ITConfig; 6、使能串口 USART_; 编写中断处理函数 USART1_IRQHandler { } 外部中断初始化过程 1、初始化 IO 口为输入使能 IO、初始化 IO 2、开启 AFIO 时钟 3、设置 IO 口与中断线的映射关系 GPIO_EXTILineConfig; 4、初始化线上中断,设置触发条件等 EXTI_Init; 5、配置中断分组(NVIC),并使能中断 NVIC_Init; 6、编写中断服务函数。 void EXTI3_IRQHandlervoid { ifEXTI_GetITStatusEXTI_Line3RESET //判断某个线上的中断是否发生 { 中断逻辑 EXTI_ClearITPendingBitEXTI_Line3; //清除 LINE 上的中断标志位 } } IWDG 过程 1、取消寄存器写保护(向IWDG_KR 写入 0X5555) IWDG_WriteAccess; 2、设置独立看门狗的预分频系数和重装载值 IWDG_SetPrescaler; IWDG_SetReload; 3、重载计数值喂狗(向IWDG_KR 写入 0XAAAA) IWDG_ReloadCounter; 4、启动看门狗向 IWDG_KR 写入 0XCCCC IWDG_Enable; 主程序中 IWDG_ReloadCounter;//喂狗 WWDG 过程 1、使能 WWDG 时钟 RCC_APB1PeriphClock; 2、设置分频数和窗口值 WWDG_SetPrescaler; WWDG_SetWindowValue; 3、分组、开启 WWDG 中断 NVIC_Init; WWDG_EnableIT; 4、设置计数器初始值并使能看门狗 WWDG_ClearFlag; WWDG_Enable; 5、编写中断服务函数 void WWDG_IRQHandlervoid { WWDG_SetCounterWWDG_CNT;//喂狗 WWDG_ClearFlag; //清除提前唤醒中断标志位 LED1LED1;//其他功能 } 通用定时器初始化过程 定时器中断 TIM3_Int_Initu16 arr,u16 psc 1、TIM3 时钟使能 RCC_APB1PeriphClock; 2、初始化定时器参数,设置自动重装值, 分频系数,计数方式等 TIM_TimeBaseInit; 4、TIM3 中断优先级设置 NVIC_Init; 3、设置 TIM3_DIER 允许更新中断 TIM_ITConfig; 5、允许 TIM3 工作,也就是使能 TIM_; 6、编写中断服务函数 void TIM3_IRQHandlervoid //TIM3 中断 { ifTIM_GetITStatusTIM3,TIM_IT_ UpdateRESET //检查 TIM3 更新中断发生与否 { TIM_ClearITPendingBitTIM3, TIM_IT_Update; //清除 TIM3 更新中断标志 LED1LED1; 通用定时器初始化过程 PWM 输出 TIM3_PWM_Initu16 arr,u16 psc 1、使能 IO 和外设,使能 AF RCC_APB1PeriphClockGPIOB; RCC_APB1PeriphClockTIM3; //使能 GPIOB、定时器 3 时钟 RCC_APB2PeriphClockAFIO; //复用时钟使能 2、重映射,GPIO 初始化 GPIO_PinRemapConfig; GPIO_Init; 3、初始化 TIM3 TIM_TimeBaseInitTIM3; //根据指定的参数初始化TIMx 4、设置 PWM 模式,使能 CHx 输出 TIM_OC2Init; 5、使能预装载寄存器、ARR 是否立即生效 TIM_OC2PreloadConfigTIM3; TIM_ARRPreloadConfigTIM3; 5、使能 TIM3 TIM_TIM3,ENABLE; 6、修改 TIM3_CCR2 来控制占空比 TIM_SetCompare2; 通用定时器初始化过程 输入捕获 TIM5_Cap_Initu16 arr,u16 psc 1、初始化通道对应 IO 和定时器的时钟 2、(可以删掉,不是必须的) 初始化 IO 口,模式为输入GPIO_Init; 3、初始化定时器 ARR,PSC TIM_TimeBaseInit; 4、初始化输入捕获通道 TIM_ICInit; 5、如果要开启捕获中断, NVIC_Init; TIM_ITConfig; 6、使能定时器 TIM_; 7、编写中断服务函数 void TIMx_IRQHandler { ifTIM_GetITStatusTIM5, TIM_IT_Update RESET { } ifTIM_GetITStatusTIM5,TIM_IT_CC1 RESET } } { TIM_OC1Po