初级会员

- 积分
- 130
- 金钱
- 130
- 注册时间
- 2019-5-4
- 在线时间
- 40 小时
|

楼主 |
发表于 2019-6-1 17:56:11
|
显示全部楼层
本帖最后由 ExtremeHoly 于 2019-7-10 20:35 编辑
#include "stm32f10x.h"
#include "bsp_usart.h"
#include "bsp_adc.h"
#include "pwm.h"
#include "bsp_TiMbase.h"
#include "led.h"
#include "delay.h"
void ALL_Init(void); /* 多个模块初始化*/
void PWM_around(void); /* 循环转动舵机*/
void Scan_fire(void); /* 扫描到目标时操作*/
void Usart_printf(void); /* 串口定时器中断输出AD值*/
void delay__ms(u16 time); /* 简易延时 */
extern __IO uint16_t ADC_ConvertedValue;
float ADC_ConvertedValueLocal; /* 局部变量,用于保存转换计算后的电压值 */
volatile uint32_t time = 0; /* ms 定时器中断计时变量*/
unsigned char x=45;
/*主函数*/
/************************************************************************************************/
/************************************************************************************************/
int main(void)
{
ALL_Init(); // 多个模块初始化
while (1)
{
PWM_around(); // 循环转动舵机
Usart_printf(); // 定时器中断串口输出AD值
Scan_fire(); // 扫描到目标时操作
}
}
/************************************************************************************************/
/************************************************************************************************/
/*模块初始化*/
/************************************************************************************************/
void ALL_Init(void)
{
USART_Config(); // 配置串口
ADCx_Init(); // ADC 初始化
TIM1_PWM_Init(1799,799); //分频。PWM频率 = 72000,000/(7199+1)/(199+1) = 50 hz =0.02s=20ms
LED_Init ();
delay_init();
BASIC_TIM_Init(); //基本定时器
}
/************************************************************************************************/
/*舵机来回转动*/
/************************************************************************************************/
void PWM_around(void)
{
TIM1->CCR1=x;
x+=2;
delay__ms(17);
// while(time%25!=0);
if(x>=225)
{
for(x=225;x>=45;x-=2)
{
TIM1->CCR1=x;
delay__ms(17);
// while(time%25!=0);
}
}
}
/************************************************************************************************/
/*扫描目标时*/
/************************************************************************************************/
void Scan_fire(void)
{
if(ADC_ConvertedValueLocal<=3000)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_2); //低电平点亮LED
printf("\r\n已扫描到目标\r\n");
printf("\r\n\r\n");
}
else
{
GPIO_SetBits(GPIOD,GPIO_Pin_2); //设置高电平
}
}
/************************************************************************************************/
/*串口输出AD值*/
/************************************************************************************************/
void Usart_printf(void)
{
if ( time == 500 ) // 定时器中断 ms
{
time = 0;
ADC_ConvertedValueLocal =(float) ADC_ConvertedValue; // ADC_ConvertedValueLocal 值最高4096
printf("\r\n The current AD value = 0x%04X \r\n", ADC_ConvertedValue);
printf("\r\n The current AD value = %f V \r\n", ADC_ConvertedValueLocal);
printf("\r\n\r\n");
}
}
/************************************************************************************************/
/*基本定时器中断 */
/************************************************************************************************/
void BASIC_TIM_IRQHandler (void)
{
if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET )
{
time++;
TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update);
}
}
/************************************************************************************************/
/*简单延时ms*/
/************************************************************************************************/
void delay__ms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000;
while(i--) ;
}
}
/************************************************************************************************/
|
|