资源简介
基于STM32单片机,通过超声波模块以及PID算法来实现对小球的控制,使得小球可以停留在所设定的高度,并具有一定的抗干扰能力。
代码片段和文件信息
#include “hcsr04.h“
#include “sys.h“
#include “delay.h“
void Gpio_Init(void)
{
RCC->AHB1ENR=1<<0; //使能PORTA时钟
GPIOA->MODER &=~(3<<(1*2)); //先清除PA1原来的设置
GPIOA->MODER |=(1<<(1*2)); //设置为通用输出模式
GPIOA->OTYPER &=~(1<<1); //先清除PA1原来的设置
GPIOA->OTYPER |=(0<<1); //设置PA1为输出推挽
GPIOA->OSPEEDR &=~(3<<(1*2)); //先清除PA1原来的设置
GPIOA->OSPEEDR |=2<<(1*2); //设置PA1输出速度为50M
GPIOA->PUPDR &=~(3<<(1*2)); //先清除PA1原来的设置
GPIOA->PUPDR |=2<<(1*2); //设置PA1下拉
}
void Trig_Init(void)
{
trig=1;
delay_us(20);
trig=0;
}
void TIM5_CH1_Cap_Init(u32 arru16 psc)
{
RCC->APB1ENR|=1<<3; //TIM5 时钟使能
RCC->AHB1ENR=1<<0; //使能PORTA时钟
GPIO_Set(GPIOAPIN0GPIO_MODE_AFGPIO_OTYPE_PPGPIO_SPEED_100MGPIO_PUPD_PD); //复用功能,下拉
GPIO_AF_Set(GPIOA02); //PA0AF2
TIM5->ARR=arr; //设定计数器自动重装值
TIM5->PSC=psc; //预分频器
TIM5->CCMR1|=1<<0; //CC1S=01 选择输入端 IC1 映射到 TI1 上
TIM5->CCMR1|=0<<4; //IC1F=0000 配置输入滤波器 不滤波
TIM5->CCMR1|=0<<3; //IC1PS=00 配置输入分频不分频
TIM5->CCER|=0<<1; //CC1P=0 上升沿捕获
TIM5->CCER|=1<<0; //CC1E=1 允许捕获计数器的值到捕获寄存器中
TIM5->EGR=1<<0; //软件控制产生更新事件使写入 PSC 的值立即生效
//否则将会要等到定时器溢出才会生效!
TIM5->DIER|=1<<1; //允许捕获 1 中断
TIM5->DIER|=1<<0; //允许更新中断
TIM5->CR1|=0x01; //使能定时器 2
MY_NVIC_Init(10TIM5_IRQn3);//抢占 1,子优先级 0,组 3
}
//捕获状态
//[7]:0没有成功的捕获;1成功捕获到一次.
//[6]:0还没捕获到低电平;1已经捕获到低电平了.
//[5:0]:捕获低电平后溢出的次数(对于 32 位定时器来说1us 计数器加 1溢出时间:4294 秒)
u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态
u32 TIM5CH1_CAPTURE_VAL; //输入捕获值(TIM2/TIM5 是 32 位)
//定时器 5 中断服务程序
void TIM5_IRQHandler(void)
{
u16 tsr;
tsr=TIM5->SR;
if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if(tsr&0X01)//溢出
{
if(TIM5CH1_CAPTURE_STA&0X40) //已经捕获到高电平了
{
if(TIM5CH1_CAPTURE_STA&0X3F)//高电平太长了
{
TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;
}
else
TIM5CH1_CAPTURE_STA++;
}
}
if(tsr&0x02) //捕获 1 发生捕获事件
{
if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿
{
TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽
TIM5CH1_CAPTURE_VAL=TIM5->CCR1;//获取当前的捕获值.
TIM5->CCER&=~(1<<1); //CC1P=0 设置为上升沿捕获
}
else //还未开始第一次捕获上升沿
{
TIM5CH1_CAPTURE_STA=0; //清空
TIM5CH1_CAPTURE_VAL=0;
TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM5->CR1&=~(1<<0) ; //使能定时器 2
TIM5->CNT=0; //计数器清空
TIM5->CCER|=1<<1; //CC1P=1 设置为下降沿捕获
TIM5->CR1|=0x01; //使能定时器 2
}
}
}
TIM5->SR=0;//清除中断标志位
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-09-06 21:48 风洞\
目录 0 2018-09-06 21:48 风洞\HARDWORKS\
目录 0 2018-09-15 21:27 风洞\HARDWORKS\HCSR04\
文件 3410 2018-09-15 21:27 风洞\HARDWORKS\HCSR04\HCSR04.c
文件 237 2018-09-05 10:18 风洞\HARDWORKS\HCSR04\HCSR04.h
目录 0 2018-09-06 21:48 风洞\HARDWORKS\MOTOR\
文件 727 2018-09-05 11:21 风洞\HARDWORKS\MOTOR\MOTOR.c
文件 219 2018-09-03 21:44 风洞\HARDWORKS\MOTOR\MOTOR.h
目录 0 2018-09-15 21:18 风洞\HARDWORKS\PID\
文件 898 2018-09-15 21:18 风洞\HARDWORKS\PID\PID.c
文件 150 2018-09-03 21:46 风洞\HARDWORKS\PID\PID.h
目录 0 2018-09-15 21:27 风洞\HARDWORKS\TIMER\
文件 1132 2018-09-15 21:27 风洞\HARDWORKS\TIMER\TIMER.c
文件 124 2018-09-03 21:39 风洞\HARDWORKS\TIMER\TIMER.h
目录 0 2018-09-15 21:18 风洞\OBJ\
文件 266714 2018-09-15 21:18 风洞\OBJ\delay.crf
文件 450 2018-09-15 21:18 风洞\OBJ\delay.d
文件 286344 2018-09-15 21:18 风洞\OBJ\delay.o
文件 267483 2018-09-15 21:18 风洞\OBJ\hcsr04.crf
文件 512 2018-09-15 21:18 风洞\OBJ\hcsr04.d
文件 287940 2018-09-15 21:18 风洞\OBJ\hcsr04.o
文件 266665 2018-09-15 21:18 风洞\OBJ\motor.crf
文件 497 2018-09-15 21:18 风洞\OBJ\motor.d
文件 284256 2018-09-15 21:18 风洞\OBJ\motor.o
文件 271036 2018-09-15 21:18 风洞\OBJ\pid.crf
文件 522 2018-09-15 21:18 风洞\OBJ\pid.d
文件 285968 2018-09-15 21:18 风洞\OBJ\pid.o
文件 59 2018-09-15 21:18 风洞\OBJ\startup_stm32f40_41xxx.d
文件 8000 2018-09-15 21:18 风洞\OBJ\startup_stm32f40_41xxx.o
文件 268564 2018-09-15 21:18 风洞\OBJ\sys.crf
文件 387 2018-09-15 21:18 风洞\OBJ\sys.d
............此处省略47个文件信息
- 上一篇:OpenGL 3D贪吃蛇程序,很小
- 下一篇:仿微信红包打开特效,3D图片翻转
相关资源
- 正点原子Mini开发板的RC522刷卡程序触
- 三菱PLC_FX3U_v8.0.zip
- STM32F1单片机MPU6050加速度计陀螺仪驱动
- STM32F1单片机MS5611高精度气压计驱动工
- STM32 3.5固件库带sdio版本V4.5.0 bug修改
- 基于STM32+TM1638芯片的共阳极数码管驱
- 畅学系列STM32开发板实验箱8位独立按
- MCP3421 STM32 Driver
- ADS1100 STM32 Driver
- STM32使用模拟IIC实现24C02读取
- STM32L476 FreeRTOS系统移植项目
- STM32F030C8 寄存器操作 OELD屏
- 畅学STM32多功能实验箱DS1302时钟芯片源
- 基于Nucleo-F302R8板一起玩转电机库SDK
- STM32+DHT11+OLED+RTC+MQ2+NRF24L01+串口12
- STM32 7寸TFT驱动
- STM32+BC20通过HTTP传输GPS北斗定位到湖畔
- Atollic_TrueSTUDIO_for_STM32_v9.0.1_20180420-1
- RTOS RTX(V1)keil自带的操作系统STM32可
-
stsw-li
nk009_STM32 STli nk v2 win10驱动 - 野火Stm32-pdf教程.rar
- 解决STM32每次程序都需要断电
- STM32H7,喜欢STM32的嵌友可以上手了
- MQ-2烟雾传感器模块.zip
- STM32 加密算法 源码代码包括AES的5种
- stm32f103AES加密 cbc模式
- W5500Test-20180314.7z
- STM 32 仿三菱PLC源码
- stm32实现的五子棋AI人机对战+人人对战
- 2.8寸彩屏ili9327驱动STM32
评论
共有 条评论