历史上的今天
今天是:2024年12月03日(星期二)
2018年12月03日 | STM32定时器及中断简单程序
2018-12-03 来源:eefocus
//----------------------------main()--------------------
//stm32f103c8t6有3个普通1个高级定时器
//每次进入中断服务程序间隔时间为
//((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒
#include
#define D13_ON GPIO_ResetBits(GPIOC,GPIO_Pin_13)
#define D13_OFF GPIO_SetBits(GPIOC,GPIO_Pin_13)
void GPIO_Config(void);
void TIM2_Config(u16 arr,u16 psc);
void NVIC_Config(void);
//主函数
int main(void)
{
GPIO_Config();
//((1+arr )/72M)*(1+psc )=((1+1999)/72M)*(1+35999)=1秒
TIM2_Config(1999,35999);
NVIC_Config();
while(1);
}
//初始化GPIO
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//PC13灯
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_13); //关闭LED
}
//初始化TIM2定时器及中断
//每次进入中断服务程序间隔时间为
//((1+arr )/72M)*(1+psc )=((1+1999)/72M)*(1+35999)=1秒
void TIM2_Config(u16 arr,u16 psc)
{
//定时器时间是1s
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
//清除中断标志位
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//TIM_ClearFlag(TIM2,TIM_FLAG_Update);//两者作用相同
//自动装载的周期值0-0xffff,72M/36000=2000
TIM_TimeBaseStructure.TIM_Period = arr;
//时钟除数预分频值0-oxffff,下面是36000分频
TIM_TimeBaseStructure.TIM_Prescaler = psc;
////普通和高级才有下面两行
//时钟分割,暂时为0,高级应用才用
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
//计数模式,向上下,中央对齐123
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
//开启中断
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
//开启外设
TIM_Cmd(TIM2,ENABLE);
}
//初始化中断向量控制器NVIC
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//--------------------stm32f10x_it.c------------------------
//中断函数中自己编写
void TIM2_IRQHandler(void)
{
//判断TIM3更新中断是否发生
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
{
//必须清楚标志位
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
//状态取反
GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)(!GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13)));
}
}
上一篇:STM32中断进行分组
史海拾趣
|
问ad9833能产生方波吗?看了它的控制寄存器功能表,好像不能直接产生方波啊,而且框图里面也没有比较器嘛,但看关于它的主要特点,都说可以直接产生正弦、三角、方波三种波形 恳请赐教… 查看全部问答> |
|
搞到了一个份能在EVC下运行的 pocketpc GIS的程序 程序都能运行 只是 随程序提供了一个map文件夹 里面放了一些 .dbf .shp和.shx的文件,应该是一些地图图片信息和相关的地理数据信息。程序运行时 需要加载上述的图片,我是在模拟器中运 ...… 查看全部问答> |
|
tlc555频率测量时,如果选取C=180PF,要求输出为20KHZ左右,匹配R1,R2时该注意什么,为什么我选取R1=18K,R2=110K,按照如下公式计算: 上升时间 (T1) = 0.693 * (R1+R2) * C 下降时间(T2) = 0.693 * R2 * C 頻率 = 1.44 / ( (R1+R2+R2) * C) ...… 查看全部问答> |
|
请问各位大侠,在WinCE中调用windows media player 时,能不能隐藏它自带的下面的一排按钮. 我在WinCE+VS2005调用Windows media player,定制它的界面,请问可以实现吗? … 查看全部问答> |
|
我调试wince的时候使用ActiveSync进行连接 有时候调试到一般,连接突然中断,但是电脑右下脚的小图标仍然是绿色,这个时候我一拔出USB电缆,电脑就会死机 这个问题困扰了我很久 希望有人能帮我解决,谢谢!… 查看全部问答> |
|
H3C公司2003年11月成立,最初由华为和3COM合资组建,2006年11月由3COM公司全资收购。 目前公司正在全力投入高端路由器产品的开发,急需大量软件开发、测试人员。 地点:杭州 职责: 1、负责H3C高端路由器产品软件开发工作,完成相关的设计文档、 ...… 查看全部问答> |
|
各位好!我现在用一台PC没有与其他PC连网,只使用它来开发,用ACTIVESYNC与WINCE设备相连,在模拟器中可以与SQLSERVER相连,可是部署到设备上时,提示找不到SQLSERVER,请问谁遇到过,帮忙解决一下,多谢!… 查看全部问答> |




