完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、前期准备
单片机:STM32F103C8T6 开发环境:MDK5.14 库函数:标准库V3.5 二、实验效果 三、驱动原理 触发信号Tirig维持10Us以上的高电平即可等待Echo的返回,这里是用EXTI检测俩个跳变信号,去打开和关闭定时器,最后一次测量计算结果后清除定时器计时,并等待下一个循环开始。需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。 四、驱动代码 US-020.h #ifndef __US_020_H__ #define __US_020_H__ #include "stm32f10x.h" #include "gpio.h" #include "delay.h" #define Trig PAout(0) #define Trig_Pin GPIO_Pin_0 #define Trig_Port GPIOA #define Trig_CLKLine RCC_APB2Periph_GPIOA #define Echo PAin(1) #define Echo_Pin GPIO_Pin_1 #define Echo_Port GPIOA #define Echo_CLKLine RCC_APB2Periph_GPIOA extern uint32_t US_Count; extern void US_020Configuration(void); extern void US_SendStartSignal(void); extern float US_DataConversion(uint32_t *count); #endif US-020.c #include "US-020.h" uint32_t US_Count = 0; void US_020Configuration(void) { GPIO_InitTypeDef GPIO; NVIC_InitTypeDef MyNVIC; EXTI_InitTypeDef MyEXTI; //Enable APB2 Bus RCC_APB2PeriphClockCmd(Trig_CLKLine | Echo_CLKLine, ENABLE); //Register IO GPIO.GPIO_Pin = Trig_Pin; GPIO.GPIO_Speed = GPIO_Speed_50MHz; GPIO.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(Trig_Port, &GPIO); Trig = 0; //Register IO GPIO.GPIO_Pin = Echo_Pin; GPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(Echo_Port, &GPIO); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级组为1,优先组(可设0~4位) MyNVIC.NVIC_IRQChannel = EXTI1_IRQn; //设置中断向量号 MyNVIC.NVIC_IRQChannelPreemptionPriority = 0; //设置抢先优先级 MyNVIC.NVIC_IRQChannelSubPriority = 1; //设置响应优先级 MyNVIC.NVIC_IRQChannelCmd = ENABLE; //使能NVIC NVIC_Init(&MyNVIC); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); MyEXTI.EXTI_Line = EXTI_Line1; MyEXTI.EXTI_Trigger = EXTI_Trigger_Rising_Falling; MyEXTI.EXTI_Mode = EXTI_Mode_Interrupt; MyEXTI.EXTI_LineCmd = ENABLE; EXTI_Init(&MyEXTI); } void US_SendStartSignal(void) { Trig = 1; DelayUs(20); Trig = 0; } float US_DataConversion(uint32_t *count) { float result = 0; result = (float)((float)(*count * 340) / 2000.0); *count = 0; return result; } void EXTI1_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line1) != RESET) { EXTI_ClearITPendingBit(EXTI_Line1); if (Echo == 1) { TIM_Cmd(TIM3, ENABLE); LED = 0; } if (Echo == 0) { TIM_Cmd(TIM3, DISABLE); LED = 1; } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3188 浏览 9 评论
2878 浏览 16 评论
3381 浏览 1 评论
8813 浏览 16 评论
3979 浏览 18 评论
9611浏览 3评论
981浏览 3评论
502浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
505浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2227浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-20 10:27 , Processed in 1.392535 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号