STM32F407裸机驱动HC-SR04无响应问题排查求助
HC-SR04与STM32F407 Discovery裸机对接问题排查
尝试用裸机编程将HC-SR04超声波传感器与STM32F407 Discovery板对接,但传感器无响应:对Trig引脚输入的10us脉冲没有反应,通过外部中断检测Echo引脚输入时,中断完全未触发。
以下是使用的代码:
#include "stm32f4xx.h" void GPIO_init(void); void EXTI_init(void); void TIM2_init(void); void usdelay(int); void msdelay(int); int main(){ GPIO_init(); TIM2_init(); EXTI_init(); while(1){ GPIOC -> ODR &= ~(1<<7); usdelay(2); GPIOC -> ODR |= (1<<7); usdelay(10); GPIOC -> ODR &= ~(1<<7); msdelay(50); } } void GPIO_init(void){ RCC -> CFGR &= ~(0x908FUL); RCC -> AHB1ENR |= (0x3<<2); GPIOC -> MODER |= (0x1<<14); GPIOC -> MODER &= ~(0x3<<12); GPIOD -> MODER |= (0x1<<28); GPIOD -> OTYPER &= ~(0x1<<14); GPIOC -> OTYPER &= ~(0x3<<6); GPIOD -> PUPDR |= (0x2<<28); GPIOC -> PUPDR |= (0xA<<12); } void TIM2_init(void){ RCC -> APB1ENR |= (0x1); TIM2 -> CR1 &= ~(0x0010); TIM2 -> PSC = 0; TIM2 -> ARR = 4; TIM2 -> SR &= ~(0x01); } void EXTI_init(void){ RCC -> APB2ENR |= (0x1<<14); SYSCFG -> EXTICR[1] |= (0x2<<8); EXTI -> IMR |= (0x1<<6); EXTI -> RTSR |= (0x1<<6); EXTI -> FTSR |= (0x1<<6); NVIC -> ISER[0] |= (0x1<<23); } void usdelay(int x){ TIM2 -> ARR = 4*x; TIM2 -> CNT = 0; TIM2 -> CR1 |= 0x01; while(!(TIM2 -> SR & (0x01))); TIM2 -> CR1 &= ~(0x01); TIM2 -> SR &= ~(0x01); } void msdelay(int x){ TIM2 -> ARR = 4000*x; TIM2 -> CNT = 0; TIM2 -> CR1 |= (0x1); while(!(TIM2 -> SR & (0x1))); TIM2 -> CR1 &= ~(0x1); TIM2 -> SR &= ~(0x1); } void EXTI9_5_IRQHandler(){ EXTI -> PR |= (1<<6); GPIOD -> ODR ^= (1<<14); }
已排除接线、供电问题:用Arduino测试后,传感器、连接以及STM32的供电均正常。曾怀疑是时钟配置问题,默认APB1ENR寄存器无预分频时为16MHz时钟,尝试过示例代码但仍无法解决。
问题解决:将中断改为PA0、输出改为PC0后问题解决,输入捕获方法也能正常工作。
内容的提问来源于stack exchange,提问作者Shardul Sajnekar
相关产品推荐
相关产品推荐

