完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
做项目时碰到的一个小问题,由于思路错误小小的困扰了一会
电机运行测试 我是今年毕业的,所以在公司里负责的东西也比较简单,这次是做一个电机的运行测试板,用来测试电机和驱动模块的好坏。测试的电机主要是步进电机和直流减速电机。在步进电机测试模块十分顺利,但是在直流减速电机测试的时候碰到了一点小问题。 测试的直流减速电机都是自带编码器的,所以要同时测试编码器的好坏,编码器正常工作时会反馈两路脉冲,MCU同时检测到两路脉冲持续一段时间后,作出反应(让指示灯和蜂鸣器响)表示正常工作。于是我第一时间想到的是STM32的输入捕获功能,因为以前都只做过一路,没有做过两路同时捕获,所以查找了一下相关资料。 但是当程序写好后发现并不起作用,想了半天,后来发现不需要这么麻烦,因为我不需要测量脉冲的频率,只需要知道是否一直有脉冲信号就行了,所以直接用外部中断来判断就好,因为脉冲频率也不高,只有10KHZ,所以从一开始就陷入了一个误区,把简单问题复杂化了。 部分代码 外部中断配置函数 void FeedBack_Config(){ GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//启用GPIO口和复用功能时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//选择外部中断源 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2); //中断分级 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_Init(&NVIC_InitStructure); //外部中断初始化 EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line2; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);}外部中断函数的内容,判断有多少个脉冲,到达一定的数量开启指示灯和蜂鸣器 void EXTI0_IRQHandler(){ if(EXTI_GetITStatus(EXTI_Line0) != RESET) { temp_ch1++; EXTI_ClearITPendingBit(EXTI_Line0); } if(((temp_ch1>=1000)&&(temp_ch1<5000))&&((temp_ch2>=1000)&&(temp_ch2<5000))) { LED(1); BEEP(1); } else if((temp_ch1>=5000)&&(temp_ch2>=5000)) { temp_ch1 = 0; temp_ch2 = 0; LED(0); BEEP(0); }}void EXTI2_IRQHandler(){ if(EXTI_GetITStatus(EXTI_Line2) != RESET) { temp_ch2++; EXTI_ClearITPendingBit(EXTI_Line2); }} |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1916 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1680 浏览 1 评论
1172 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
771 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1732 浏览 2 评论
1973浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
808浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
257浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
625浏览 3评论
634浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 22:55 , Processed in 0.742486 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号