完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
不知道哪里出问题了??不能进入中断。。
main() { #ifdef DEBUG debug(); #endif /*定时器中断的配置顺序:开启时钟→设置中断向量→引脚初始化→设置tiM_Cfg→开启TIM→中断函数*/ RCC_ConfigSelectHSE(); //初始化时钟 NVIC_Configuration2(); //设置中断向量 GPIO_cfg(); //初始化I/O Init_TIM(); //初始化定时器 TIM4_IRQHandler(); } void RCC_ConfigSelectHSE(void) { RCC_ClocksTypeDef RCC_Clocks; /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Disable HSI */ RCC_HSICmd(DISABLE) ; /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ if(RCC_WaitForHSEStartUp() == SUCCESS) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); //时钟延迟,当系统时钟为72M时, //此处应为 Flash 2 wait state ,这点非常重要!!!! /* Disable PLL */ RCC_PLLCmd(DISABLE); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); //72M /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); //36M /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); //72M /* ADCCLK = PCLK2/8 */ RCC_ADCCLKConfig(RCC_PCLK2_Div8); //ADC_Clk=9M (the max clk is 14M) /* PLLCLK = 12MHz*6= 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_7); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } } RCC_GetClocksFreq(&RCC_Clocks); /* Enable peripheral clocks --------------------------------------------------*/ RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB , ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); } void GPIO_cfg(void) { GPIO_InitTypeDef GPIO_InitStructure; /*初始化PB6作为信号接收端口---TIM4——CH1 无重映射*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB,&GPIO_InitStructure); /*初始化PC5作为测试端口,若有中断进入拉高PC5脚*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; GPIO_Init(GPIOC,&GPIO_InitStructure); /*初始化PC5作为测试端口,若有中断进入拉高PC5脚*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; GPIO_Init(GPIOC,&GPIO_InitStructure); /*初始化PC6作为测试端口,若没有中断进入拉高PC6脚*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; GPIO_Init(GPIOC,&GPIO_InitStructure); } void NVIC_Configuration2(void) { NVIC_InitTypeDef NVIC_InitStruct; #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0); #else NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); #endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStruct.NVIC_IRQChannel= TIM4_IRQChannel; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0; NVIC_InitStruct.NVIC_IRQChannelSubPriority=0; NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStruct); } void Init_TIM(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; /* APB1 Periph clock enable */ TIM_DeInit(TIM4); //缺省TIMER配置 //设置TIM时钟 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //选择系统时钟; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up ; //向上计数方式; TIM_TimeBaseStructure.TIM_Period = 65535 ; //重加载寄存器配置为65535 , 那么可捕获的最大脉冲就是65535/2400 = 27.3 ms TIM_TimeBaseStructure.TIM_Prescaler = 29 ; //把TIM3的除数因子配置为29 , 那么TIM3的分辨率就是 1 / (72000 / (29+1)) = 1/ 2400 ms TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure) ; TIM_ICInitStructure.TIM_Channel = TIM_Channel_1 ; TIM_ICInitStructure.TIM_ICFilter =0x0; TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP ; //和TIM_ICMode_PWMI分别是输入捕获和PWM捕获模式 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //TIM_ICPolarity_Falling ; //下降沿捕获 TIM_ICInitStructure.TIM_ICPrescaler= TIM_ICPSC_DIV1 ; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInit( TIM4, &TIM_ICInitStructure ); TIM_SelectInputTrigger(TIM4, TIM_TS_TI1FP1); //选择TIM4输入触发源---TIM经滤波定时器输入2 TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); //复位模式为从模式 TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable); //选择TIM4从模式----选中触发信号(TRGI)的上升沿初始化计数器并更新触发寄存器 TIM_Cmd( TIM4, ENABLE ); //使能定时器 TIM_ITConfig( TIM4, TIM_IT_CC1, ENABLE);//使能定时器中断 } void TIM4_IRQHandler(void) { if(TIM_GetITStatus(TIM4,TIM_IT_CC1) == SET) { TIM_ClearITPendingBit(TIM2 , TIM_IT_CC1); GPIO_SetBits( GPIOC, GPIO_Pin_5 ); } else { GPIO_ResetBits( GPIOC, GPIO_Pin_6 ); } } |
|
相关推荐
6个回答
|
|
我也不知道哪里的问题.
|
|
|
|
主函数中连个WHILE循环都没有…………
而且TIM4_IRQHandler();这个中断函数放不必在主程序中,当由中断时自己就能找到了…… 库函数研究不深,这个基本编程问题就给你指出来了,具体的库函数是否能够捕获就需要请教那些用库函数的了 |
|
|
|
谢谢指正。。初学。。愁啊!
|
|
|
|
那么 有没有明显的错误地方。。麻烦指正下。
|
|
|
|
请问楼主,你有没有用软件仿真单步调试过?有没有用软件仿真看过相关寄存器的配置?
比如NVIC, 比如定时器的寄存器, 也许这些问题你可以自己解决的,初学这两个字是不能拿来当思想懒惰的借口的 |
|
|
|
没有。。我再看看先。。。谢谢你的良言。。
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 19:59 , Processed in 0.790685 second(s), Total 57, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号