完整源碼:
基于STM32F103C8T6超聲波測距源碼及接線(已調(diào)).7z
(1.15 MB, 售價: 2 E幣)
2020-6-5 09:14 上傳
點擊文件名下載附件
售價: 2 E幣 [記錄]
[ 購買]
1.png (291.78 KB)
下載附件
2020-6-5 09:12 上傳
2.png (530.03 KB)
下載附件
2020-6-5 09:12 上傳
使用KEIL 5 打開
解壓文件后彈窗點擊選擇 Cancel
否則編譯會出現(xiàn)錯誤
如果第一次彈窗沒有點擊取消,則重新解壓。
3.png (120.4 KB)
下載附件
2020-6-5 09:12 上傳
部分代碼:
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "led.h"
- #include "key.h"
- /***************************************************
- 硬件連接
- 串口1:RX PA10 TX PA9
- 超聲波:Trig PB11 ECHG PB10
- 備注:以下代碼非原創(chuàng),只是經(jīng)過修改適配成STM32F103C8T6
- 若侵權,請告知。
- ***************************************************/
- //超聲波硬件接口定義
- #define HCSR04_PORT GPIOB
- #define HCSR04_CLK RCC_APB2Periph_GPIOB
- #define HCSR04_TRIG GPIO_Pin_15
- #define HCSR04_ECHO GPIO_Pin_14
- //超聲波計數(shù)
- u16 msHcCount = 0;
- //定時器4設置
- void hcsr04_NVIC()
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- //IO口初始化 及其他初始化
- void Hcsr04Init()
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);
- GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
- GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);
- GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
- GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
- TIM_DeInit(TIM2);
- TIM_TimeBaseStructure.TIM_Period = (1000-1);
- TIM_TimeBaseStructure.TIM_Prescaler =(72-1);
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
- TIM_ClearFlag(TIM4, TIM_FLAG_Update);
- TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
- hcsr04_NVIC();
- TIM_Cmd(TIM4,DISABLE);
- }
- //打開定時器4
- static void OpenTimerForHc()
- {
- TIM_SetCounter(TIM4,0);
- msHcCount = 0;
- TIM_Cmd(TIM4, ENABLE);
- }
- //關閉定時器4
- static void CloseTimerForHc()
- {
- TIM_Cmd(TIM4, DISABLE);
- }
- //定時器4終中斷
- void TIM4_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
- {
- TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
- msHcCount++;
- }
- }
- //獲取定時器4計數(shù)器值
- u32 GetEchoTimer(void)
- {
- u32 t = 0;
- t = msHcCount*1000;
- t += TIM_GetCounter(TIM4);
- TIM4->CNT = 0;
- delay_ms(50);
- return t;
- }
- //通過定時器4計數(shù)器值推算距離
- float Hcsr04GetLength(void )
- {
- u32 t = 0;
- int i = 0;
- float lengthTemp = 0;
- float sum = 0;
- while(i!=5)
- {
- TRIG_Send = 1;
- delay_us(20);
- TRIG_Send = 0;
- while(ECHO_Reci == 0);
- OpenTimerForHc();
- i = i + 1;
- while(ECHO_Reci == 1);
- CloseTimerForHc();
- t = GetEchoTimer();
- lengthTemp = ((float)t/58.0);//cm
- sum = lengthTemp + sum ;
- }
- lengthTemp = sum/5.0;
- return lengthTemp;
- }
-
- //測試主函數(shù)
- int main(void)
- {
- float length;
- delay_init(); //延時函數(shù)初始化
- NVIC_Configuration(); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
- uart_init(9600); //串口初始化為9600
- Hcsr04Init();
- printf("串口測試\r\n");
- Hcsr04Init();
- printf("超聲波初始化成功!\n");
-
- while(1)
- {
- length = Hcsr04GetLength();
- printf("距離為:%.3fcm\n",length);
- delay_ms(1000);
- }
- }
復制代碼
【必讀】版權免責聲明
1、本主題所有言論和內(nèi)容純屬會員個人意見,與本論壇立場無關。2、本站對所發(fā)內(nèi)容真實性、客觀性、可用性不做任何保證也不負任何責任,網(wǎng)友之間僅出于學習目的進行交流。3、對提供的數(shù)字內(nèi)容不擁有任何權利,其版權歸原著者擁有。請勿將該數(shù)字內(nèi)容進行商業(yè)交易、轉載等行為,該內(nèi)容只為學習所提供,使用后發(fā)生的一切問題與本站無關。 4、本網(wǎng)站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網(wǎng)站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內(nèi)刪除,禁止商用。6、如有侵犯你版權的,請及時聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|