标题:
STM32超声波测距模块源码
[打印本页]
作者:
yxlmlol
时间:
2019-6-25 12:07
标题:
STM32超声波测距模块源码
超声波测距模块源码
单片机源程序如下:
/**************************************************************************//**
* @file main.c
* @brief 通用定时器测试案例:定时中断、捕获、PWM控制LED亮度及控制Servo
* @version V1.00
* @date 2019/4/6
* @note
* Copyright (C) 2019 T费
* @par
*
******************************************************************************/
//--------头文件引用--------//
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "led.h"
#include "oled.h"
#include "timer.h"
//--------测试函数定义--------//
/*
通用定时器功能测试函数——PA4、PA5控制LED定时翻转
*/
void timerTest() {
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
init_LEDAPin(); //初始化与LED连接的硬件接口——PA4、PA5、PA6、PA7
TIM3_INT_Init(4999,7199); //10Khz的计数频率,计数到5000为500ms
//软件定时到200ms,PA6连接LED发生一次反转
while(1)
{
LEDA5=!LEDA5;
delay_ms(200);
}
}
/*
捕获功能测试函数——PA0作为捕获通道,测试按键按下的时间(先捕获上降沿,再捕获下升沿)
*/
extern u8 TIM2CH1_CAPTURE_STA; //输入捕获状态
extern u16 TIM2CH1_CAPTURE_VAL; //输入捕获值
void capTest() {
u32 temp=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
delay_init(); //延时函数初始化
uart_init(115200); //115200
init_LEDAPin(); //初始化与LED连接的硬件接口
TIM2_CAP_Init(0XFFFF,72-1); //以1Mhz的频率计数
while(1)
{
delay_ms(10);
if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
{
temp=TIM2CH1_CAPTURE_STA&0X3F;
temp*=65536; //溢出时间总和
temp+=TIM2CH1_CAPTURE_VAL; //得到总的高电平时间
printf("HIGH Time:%d us\r\n",temp); //打印总的高点平时间
TIM2CH1_CAPTURE_STA=0; //开启下一次捕获
}
}
}
/*
PWM功能测试函数——PA6调节LED亮度
*/
void PWMTest() {
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延时函数初始化
init_LEDPin();
TIM3_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare1(TIM3,led0pwmval);
}
}
/*
PWM功能测试函数——PA2控制模拟舵机SG 90
*/
void servoTest() {
u16 led0pwmval;
delay_init();
TIM2_PWM_Init(2000,719); //100Khz的计数频率,计数到2000为20ms
for(led0pwmval=50;led0pwmval<150;led0pwmval++)
{
TIM_SetCompare3(TIM2,led0pwmval);
delay_ms(15); //延时多久很重要,自己一点点试。
}
while(1);
}
void servo(){
u16 led0pwmval;
delay_init();
tim3_init(2000,719); //100Khz的计数频率,计数到2000为20ms
for(led0pwmval=50;led0pwmval<150;led0pwmval++)
{
TIM_SetCompare3(TIM3,led0pwmval);
delay_ms(15); //延时多久很重要,自己一点点试。
}
while(1);
}
/*
主函数——四个测试功能,通过调用不同的测试函数来选择
*/
int main(void)
{
timerTest();
//capTest();
//PWMTest();
//servoTest();
//servo();
}
复制代码
所有资料51hei提供下载:
Timer_C8T6.7z
(211.92 KB, 下载次数: 37)
2019-6-25 21:40 上传
点击文件名下载附件
超声波测距模块源码
下载积分: 黑币 -5
作者:
喝雪碧
时间:
2019-6-27 16:06
请问这个有电路连接图吗?
作者:
wubingbing
时间:
2019-11-23 09:31
多谢了,正好要用
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1