stm32常用功能配置逻辑总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32配置逻辑
1、RCC配置
缺省RCC寄存器—选择时钟源—设置高低速AHB时钟分频—设置ADC时钟—使能锁相环时钟—将锁相环设置为系统时钟—打开使用到的外部时钟
Rcc子函数编写
Void RCC_Configuation();
{
定义错误变量
ErrorStatus HSEStartUpStatus;
初始化RCC外部寄存器
RCC_Deinit();
打开外部高速晶振
RCC_HSEConfig(RCC_HSE_ON)
等待外部高速晶振准备好
HSEStuartUpStatus=RCC_WaitForHSEStuartUp;
判断是否起振
if(HSEStuartUpStuartUpStatus==SUCCES)
{
使能FLASH预读取缓冲区
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable)
设置FLASH_Latency延时周期
FLASH_SetLatency(FLASH_Latency_x)
配置高速总线AHB时钟
RCC_HCLKConfig(RCC_SYSCLK_DIVx);
配置低总线APB2时钟
RCC_PCLK2Config(RCC_HCLK_Divx);
配置低总线APB1时钟
RCC_PCLK1Config(RCC_HCLK_Divx);
配置ADC外部时钟
RCC_ADCCLKConfig(RCC_PCLK2_Divx);
配置锁相环PLL时钟源及倍频
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9)
使能锁相环时钟
RCC_PLLCmd(ENABLE);
等待PLL时钟稳定输出
While(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
将锁相环设置为系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
等待校验成功
While(RCC_GetSYSCLKSource()!=0x08);
}
打开使用到的外部时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
}
2、GPIO的配置
Rcc设置——gpio配置——led操作——while(1)
主函数说明
#include "stm32f10x_lib.h"
主函数
int main(void)
{
时钟配置
void RCC_Configuration(void);
IO口初始化
void GPIO_Configuration(void)
{
定义结构
GPIO_InitTypeDef GPIO_InitStructure;
选择引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x | GPIO_Pin_x;
所选引脚频率
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_xMHz;
所选引脚模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
初始化配置
GPIO_Init(GPIOx , &GPIO_InitStructure);
}
while(1)
{
置位引脚
GPIO_SetBits(GPIOA , GPIO_Pin_2);
GPIO_SetBits(GPIOA , GPIO_Pin_3);
Delay(n);
清零引脚
GPIO_ResetBits(GPIOA , GPIO_Pin_2);
GPIO_ResetBits(GPIOA , GPIO_Pin_3);
Delay(n);
}
}
3、EXTI配置规则
配置时钟→初始化IO口→配置中端向量优先级→指定中断IO口→中断方式→使能中断→写中断函数
主函数
Void main (void)
{
开启用到的外设时钟
Void RCC_Configuation();
初始化IO口
Void IO_Configuation();
中断设置
Void EXTI_Configuation()
{
定义结构变量
EXTI_InitTypeDef EXTI_InitStructure;
清除中断标志
EXTI_ClearPendingBit(EXTI_Linex);
选择中断管脚
GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcex)
选择中段线路
EXTI_InitStructure.EXTI_Line(EXTI_Linex);
中断模式
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
中断触发方式
EXTI_InitStructure.EXTI_Trigger=EXTI_Teigger_Rising_Falling;
中段线路使能
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
初始化设置
EXTI_Init(&EXTI_InitStucture);