STM中断程序带详细注释.doc
- 文档编号:232019
- 上传时间:2022-10-07
- 格式:DOC
- 页数:3
- 大小:20KB
STM中断程序带详细注释.doc
《STM中断程序带详细注释.doc》由会员分享,可在线阅读,更多相关《STM中断程序带详细注释.doc(3页珍藏版)》请在冰豆网上搜索。
本文档免费下载,如果你觉得对你有帮助,情给好评并下载,我需要财富值,谢谢!
/**********************STM32F103外部中断************************
*********************长沙理工大学3+1实验室*********************
*************************2012年9月22日*************************/
#include"stm32f10x.h"
//配置系统时钟************************************************************
voidRCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus; //将外部时钟设置成枚举变量
RCC_DeInit(); //复位RCC外部设备寄存器到默认值
RCC_HSEConfig(RCC_HSE_ON);//打开外部时钟
HSEStartUpStatus=RCC_WaitForHSEStartUp();//检测外部时钟是否就绪
if(HSEStartUpStatus==SUCCESS)//如果就绪(SUCCESS)则进行下一步程序
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//开启flash缓冲功能(使能缓存)
FLASH_SetLatency(FLASH_Latency_2); //延时两个周期
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟为不分频的系统时钟
RCC_PCLK1Config(RCC_HCLK_Div2);//设置AP1为2分频系统时钟(不能超过36M)
RCC_PCLK2Config(RCC_HCLK_Div1);//设置AP1为为系统时钟频率(前面AHB给定的时钟)
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//设置外部时钟为PLL的上输入时钟并且倍频9
RCC_PLLCmd(ENABLE);//使能PLL时钟
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//检测PLL是否就绪 RESET:
就绪
{}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置外部时钟作为系统的时钟
while(RCC_GetSYSCLKSource()!
=0x08)//检测外部时钟是否作为PLL的输入时钟
{}
}
}
//配置GPIO函数************************************************
//功能:
配置GPIO的输入输出模式
voidGPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure; //定义GPIO初始化函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能GPIOA和GPIOB的时钟,配置其复用模式
//配置GPIO口的输入*******
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//配置1脚为输入脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//配置GPIO为上拉输入模式
GPIO_Init(GPIOA,&GPIO_InitStructure);//把配置好的GPIO口初始化一下
//配置GPIO的输出*******
GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3);//将PA2和PA3拉高
GPIO_SetBits(GPIOB,GPIO_Pin_2);//将PA2和PA3拉高
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//配置0脚为输出脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//配置GPIO为推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置GPIO口的输出速率是50M
GPIO_Init(GPIOA,&GPIO_InitStructure);//使能GPIOA口
}
//外部中断函数*************************************************************************************
voidEXTI_Configuration(void)
{
EXTI_InitTypeDefEXTI_InitStructure; //初始化外部中断寄存器
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能IO时钟
EXTI_ClearITPendingBit(EXTI_Line1); //清除IO口中断清除挂起位(清除中断标志位)
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //设置外部中断触发(另一种是事件触发)
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//设置中断触发方式:
上下沿触发方式
EXTI_InitStructure.EXTI_Line=EXTI_Line1; //选择中断线路为1(即选择那个IO作为中断输入)
EXTI_InitStructure.EXTI_LineCmd=ENABLE; //使能外部中断
EXTI_Init(&EXTI_InitStructure);//初始化
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);//将GPIOA1挂到中断上
}
//中断分组函数***************************************************************
voidNIVC_Configuration(void)
{
NVIC_InitTypeDefNVIC_InitStructure;//初始化中断分组函数
//NVIC_PriorityGroupConfig:
设置优先级分组(下面一句)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置抢占式优先级:
先占优先级0位,从优先级4位
NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;//将中断挂到GPIO1脚外部中断线1上
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //设置响应式优先级:
先占优先级1位,从先级3位
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能设置的外部中断通道请求
NVIC_Init(&NVIC_InitStructure); //初始化
}
//中断服务函数********************************************************
voidEXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1)!
=RESET)
{
//添加中断处理函数
GPIO_ResetBits(GPIOA,GPIO_Pin_2);//点亮led
EXTI_ClearFlag(EXTI_Line1); //清除标志中断位
EXTI_ClearITPendingBit(EXTI_Line1); //清除外部中断线1的挂起位
}
}
//主函数***********************************************************************
intmain(void)
{
RCC_Configuration(); //调用系统时钟函数
GPIO_Configuration(); //调用GPIO
NIVC_Configuration();
EXTI_Configuration();
while
(1);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM 中断 程序 详细 注释
![提示](https://static.bdocx.com/images/bang_tan.gif)