新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2018-8-12
- 在线时间
- 5 小时
|

楼主 |
发表于 2018-8-22 12:37:28
|
显示全部楼层
我才发现TIM5的端口和TIM2是重复的,所以我好像不能用PWM 了...其实我最不懂的是为什么在我没有加TIM4作秒表的时候小车是可以正常运行的,蜂鸣器也不会影响的,加了TIM4秒表之后,这两个就冲突了.在我加TIM4秒表之前也已经使用了TIM2 和 TIM3,他俩就不会和蜂鸣器冲突,
这是我TIM4的代码
#include "tim.h"
#include "lcd1602.h"
#include "speedctrol.h"
//定时器时间计算公式Tout = ((重装载值+1)*(预分频系数+1))/时钟频率;
//例如:1秒定时,重装载值=9999,预分频系数=7199
void TIM4_Init(u16 arr,u16 psc){ //TIM4 初始化 arr重装载值 psc预分频系数
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4
TIM4_NVIC_Init (); //开启TIM4中断向量
TIM_TimeBaseInitStrue.TIM_Period=arr; //设置自动重装载值
TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //预分频系数
TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //计数器向上溢出
TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; //时钟的分频因子,起到了一点点的延时作用,一般设为TIM_CKD_DIV1
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStrue); //TIM4初始化设置
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);//使能TIM4中断
TIM_Cmd(TIM4,ENABLE); //使能TIM4
}
void TIM4_NVIC_Init (void){ //开启TIM4中断向量
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x3; //设置抢占和子优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM4_IRQHandler(void){ //TIM4中断处理函数
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET){ //判断是否是TIM4中断
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
second++;
distance = (front_left_speed+front_right_speed)/2*second;
LCD_Setpos_Dispnum(1,5,second);
LCD_Setpos_Dispnum(2,9,distance);
//此处写入用户自己的处理程序
}
}
这是我用到蜂鸣器的寻迹函数
void SearchRun(void)
{
if(ProximityData/10>=2200&ProximityData2/10>=2600&ProximityData/10<=2399&ProximityData2/10<=2690)
{
ctrl_comm = COMM_UP;
}
if(ProximityData2/10 > 2690&ProximityData2/10 <=3000)//
{
ctrl_comm = COMM_RIGHT;
}
if(ProximityData/10 > 2399&ProximityData/10<=2550)//
{
ctrl_comm = COMM_LEFT;
}
if(ProximityData/10 > 2550 | ProximityData2/10>3000)
{
BUZZER_BEEP1();
if(ProximityData/10 > 2550)
ctrl_comm = COMM_RIGHT;
if(ProximityData2/10>3000)
ctrl_comm = COMM_LEFT;
}
} |
|