资源简介
基于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图片翻转
相关资源
- I2C读写AT24C02 基于STM32F103 cube116540
- PID_AutoTune_v0.rar
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- FPGA实现PID.v
- DV泵加罗茨泵独立控制系统PID.smart
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- 模糊PID控制 c
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- 课程设计蔬菜大棚自动控制系统,包
评论
共有 条评论