欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于STM32的智能循跡小車源程序
[打印本頁]
作者:
第幾秒
時間:
2017-7-28 14:33
標題:
基于STM32的智能循跡小車源程序
基于STM32的智能循跡小車源程序,希望對大家有參考價值!
單片機源程序如下:
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_it.h"
#include "systick.h"
#include "misc.h"
#include "stm32f10x_it.h"
//#define infra1 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7);
//#define infra2 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9);
#define tube1 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9);
#define tube2 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_11);
#define tube3 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13);
#define tube4 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15);
extern FlagStatus Status;
u8 flag=0;
extern u16 TIM1Compare1[2] = {0x0,0x3FFF};
extern u16 TIM1Compare2[3] = {0x7100,0x7000,0x3fff};
extern u16 TIM1Compare3[2] = {0x0,0x3FFF};
extern u16 TIM1Compare4[3] = {0x7400,0x8FFF,0x3FFF};
extern u16 tubecnt=0;
extern u16 juli;
void GPIO_Configuration(void);
void TIM_Configuration(void);
void RCC_Configuration(void);
void NVIC_Configuration(void);
void stop__(void);
void zhi_fast(void);
void zhi(void);
void zhi_slow(void);
void zhi_wait(void);
void zuoxiao(void);
void zuoda(void);
void zuodada(void);
void youxiao(void);
void youda(void);
void xunji_qian(void);
void xunji_hou(void);
void xunji_dan(void);
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM1_OCInitStructure;
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
TIM_Configuration();
NVIC_Configuration();
delay_init();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_10)==1)
{
if(flag==0)
xunji_hou();
if(flag==1)
xunji_qian();
}
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_10)==0) xunji_dan();
}
}
/*TIM2 TIM3 的中斷優先級*/
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*TIM1 PWM 輸出:A8:CH1 / A9:CH2 / A10:CH2 / A11:CH4 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*LED顯示:LED5:PE15 / LED6:PB11 / LED7:PE14 / LED8:PB10 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_10);
GPIO_SetBits(GPIOB,GPIO_Pin_11);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
GPIO_SetBits(GPIOE,GPIO_Pin_15);
/*紅外管:infra1-> PC7, infra2-> PC8 浮空輸入 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// GPIO_ResetBits(GPIOC,GPIO_Pin_7);
// GPIO_ResetBits(GPIOC,GPIO_Pin_8);
/*光電管:tube1-> PD9, tube2-> PD11, tube3-> PD13, tube4-> PD15 浮空輸入*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1|GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/*超聲波:TX->PB9 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits( GPIOB, GPIO_Pin_9);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PB8接受采集上升沿 PB6低電平
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_10);
}
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM1_TimeBaseStructure;
TIM_OCInitTypeDef TIM1_OCInitStructure;
TIM_DeInit(TIM1);
/* Time Base configuration */
TIM1_TimeBaseStructure.TIM_Prescaler = 0x0; //設置了用來作為TIMx時鐘頻率除數的預分頻值
TIM1_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //選擇了計數器模式
TIM1_TimeBaseStructure.TIM_Period = 0xFFFF; //設置了在下一個更新事件裝入活動的自動重裝載寄存器周期 ARR
TIM1_TimeBaseStructure.TIM_ClockDivision = 0x0; //設置了時鐘分割
TIM1_TimeBaseStructure.TIM_RepetitionCounter = 0x0; //設置了周期計數器值
TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseStructure);//根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位(5個參數)
//TIM1基本計數器設置(設置PWM頻率) //頻率=TIM1_CLK/(ARR+1)
/* Channel 1, 2,3 and 4 Configuration in PWM mode */
TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM1_OCInitStructure.TIM_Pulse = 0x0;
TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM1_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
TIM1_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM1_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM1,&TIM1_OCInitStructure); //同TimeBaseStructure (8個參數) //TIM1_OC1模塊設置(設置1通道占空比)
TIM1_OCInitStructure.TIM_Pulse = 0x7fff;
TIM_OC2Init(TIM1,&TIM1_OCInitStructure); //同TimeBaseStructure
TIM1_OCInitStructure.TIM_Pulse = 0x0;
TIM_OC3Init(TIM1,&TIM1_OCInitStructure); //同TimeBaseStructure
TIM1_OCInitStructure.TIM_Pulse = 0x7fff;
TIM_OC4Init(TIM1,&TIM1_OCInitStructure); //同TimeBaseStructure
TIM_Cmd(TIM1,ENABLE); //先設置好了TimeBase、OC、BDTR 使能或者失能TIM1外設
TIM_CtrlPWMOutputs(TIM1,DISABLE); //TIM1_CtrlPWMOutputs(ENABLE); 使能或者失能TIM1的主輸出
/*超聲波 TIM2 TIM3*/
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=72-1;
TIM_TimeBaseStructure.TIM_Prescaler=15-1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2,DISABLE);
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Prescaler =72-1; //設置了用來作為TIMx時鐘頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //選擇了計數器模式
TIM_TimeBaseStructure.TIM_Period = 20-1; //設置了15us在下一個更新事件裝入活動的自動重裝載寄存器周期 ARR
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //設置了時鐘分割
TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure);
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,DISABLE);
}
void stop__(void) //直走速度正常
{
TIM_SetCompare1(TIM1,0);
TIM_SetCompare2(TIM1,0);
TIM_SetCompare3(TIM1,0);
TIM_SetCompare4(TIM1,0);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void zhi(void) //直走速度正常
{
TIM_SetCompare1(TIM1,TIM1Compare1[0]);
TIM_SetCompare2(TIM1,TIM1Compare2[0]);
TIM_SetCompare3(TIM1,TIM1Compare3[0]);
TIM_SetCompare4(TIM1,TIM1Compare4[0]);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void zhi_fast(void) //直走速度快
{
TIM_SetCompare1(TIM1,TIM1Compare1[0]);
TIM_SetCompare2(TIM1,TIM1Compare2[1]);
TIM_SetCompare3(TIM1,TIM1Compare3[0]);
TIM_SetCompare4(TIM1,TIM1Compare4[1]);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void zhi_slow(void) //直走速度慢
{
TIM_SetCompare1(TIM1,TIM1Compare1[0]);
TIM_SetCompare2(TIM1,TIM1Compare2[2]);
TIM_SetCompare3(TIM1,TIM1Compare3[0]);
TIM_SetCompare4(TIM1,TIM1Compare4[2]);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void zhi_wait(void) //直走_deng
{
TIM_SetCompare1(TIM1,TIM1Compare1[0]);
TIM_SetCompare2(TIM1,0x38ff);
TIM_SetCompare3(TIM1,TIM1Compare3[0]);
TIM_SetCompare4(TIM1,0x38ff);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void zuoxiao(void) //左小轉
{
TIM_SetCompare1(TIM1,0);
TIM_SetCompare2(TIM1,0x0);
TIM_SetCompare3(TIM1,0);
TIM_SetCompare4(TIM1,0xdfff);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void zuoda(void) //左大轉
{
TIM_SetCompare1(TIM1,0);
TIM_SetCompare2(TIM1,0);
TIM_SetCompare3(TIM1,0);
TIM_SetCompare4(TIM1,0xffff);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void zuodada(void)
{
TIM_SetCompare1(TIM1,0x5fff);
TIM_SetCompare2(TIM1,0);
TIM_SetCompare3(TIM1,0);
TIM_SetCompare4(TIM1,0xffff);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void youxiao(void) //右小轉
{
TIM_SetCompare1(TIM1,TIM1Compare1[0]);
TIM_SetCompare2(TIM1,TIM1Compare2[0]);
TIM_SetCompare3(TIM1,TIM1Compare3[0]);
TIM_SetCompare4(TIM1,0x0);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void youda(void) //右大轉
{
TIM_SetCompare1(TIM1,0);
TIM_SetCompare2(TIM1,0xffff);
TIM_SetCompare3(TIM1,0);
TIM_SetCompare4(TIM1,0);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void youdada(void) //右大轉
{
TIM_SetCompare1(TIM1,0);
TIM_SetCompare2(TIM1,0xffff);
TIM_SetCompare3(TIM1,0x5fff);
TIM_SetCompare4(TIM1,0);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void xunji_dan(void)
{
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1)
{
delay_us(500);
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1)
{
tubecnt++;
if(tubecnt==1)
{
zhi();delay_ms(150);
}
if(tubecnt==2||tubecnt==3||tubecnt==4)
{
zhi();
delay_ms(650);
zuodada();
delay_ms(250);
}
if(tubecnt==5)
{
zhi();
delay_ms(650);
zuodada();
delay_ms(300);
tubecnt=0;
}
}
return;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==0&&GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==0)
{zhi();return;}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==1&&GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==1)
{zhi();return;}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==1)
{youda();return;}
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==1)
{ zuoda();return;}
}
void xunji_qian(void) //循跡
{
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1)
{
delay_us(500);
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1)
{
tubecnt++;
if(tubecnt==1)
{
zhi();delay_ms(150);
}
if(tubecnt==2||tubecnt==3)
{
zhi();
delay_ms(400);
zuodada();
delay_ms(270);
}
if(tubecnt==4)
{
zhi();
delay_ms(580);
zuodada();
delay_ms(360);
zhi();delay_ms(600);
zhi_slow(); /*delay_ms(65535);
zhi_slow(); delay_ms(65535);
zhi_slow(); delay_ms(20000);*/
while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==1);
delay_ms(10);
zhi();delay_ms(100);
}
if(tubecnt==5)
{
zhi();
delay_ms(350);
zuoda();
delay_ms(800);
tubecnt=0;
flag=0;
}
}
return;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==0&&GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==0)
{zhi();return;}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==1&&GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==1)
{zhi();return;}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==1)
{youxiao();return;}
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==1)
{ zuoxiao();return;}
}
void xunji_hou(void) //循跡
{
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==0)
{
stop__();
while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==0);
}
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1)
{
delay_us(500);
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1)
{
tubecnt++;
if(tubecnt==1)
{
zhi();delay_ms(150);
}
if(tubecnt==2||tubecnt==3)
{
zhi();
delay_ms(500);
zuodada();
delay_ms(300);
}
if(tubecnt==4)
{
zhi();delay_ms(430);
// while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==0||GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==0))
zuodada();delay_ms(240);
zhi();delay_ms(360);
while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_9)==0);
zuodada();delay_ms(300);
zhi();delay_ms(800);
while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==0);
youdada();delay_ms(360);
zhi();delay_ms(800);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
STM32_小車_乙_Last.rar
(214.1 KB, 下載次數: 465)
2017-7-28 16:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
only墨麟
時間:
2017-9-27 23:04
謝謝啦,剛好缺少這個
作者:
only墨麟
時間:
2017-9-27 23:05
謝謝啦,剛好缺少這個
作者:
1879397372
時間:
2017-11-20 20:01
黑幣不夠~~~~
作者:
yuexudong
時間:
2017-11-22 21:30
太棒了
作者:
wyt1456178707
時間:
2017-12-1 00:08
我用的是stm32f103vet6 keil5 ST-link,要怎么 修改 我是新手 求大神指點
作者:
jiange666
時間:
2017-12-21 11:23
找到想要的了,謝謝樓主
作者:
333333331
時間:
2018-3-7 08:27
樓主,請問這個程序適合用神州2號開發板嗎
作者:
abc729003380
時間:
2018-4-11 22:08
黑幣不夠
作者:
abc729003380
時間:
2018-4-12 18:48
黑幣不夠了
作者:
))@::
時間:
2018-5-2 23:27
哇哇,想要這個丫丫丫
作者:
dazuo0845
時間:
2018-5-28 20:22
感謝分享
作者:
1005045175
時間:
2018-6-6 20:36
哇哇哇謝謝樓主
作者:
吉布森
時間:
2018-7-17 15:06
樓主厲害
作者:
joindp
時間:
2018-10-5 17:54
很給力
作者:
szyinbo
時間:
2018-10-7 07:56
感謝分享
作者:
137434741
時間:
2018-10-10 14:01
贊一個,超給力,正好借鑒一下
作者:
不懂裝懂
時間:
2018-10-22 20:27
厲害啊,大神求帶
作者:
TT3721
時間:
2018-11-23 09:50
正好缺這個程序
作者:
烏木喉
時間:
2018-11-27 18:19
請問下載之后是需要按順序燒進單片機嗎,第一次做這個東西,不太懂,求大佬
作者:
xqiang
時間:
2018-12-18 16:38
謝謝啦,剛好缺少這個
作者:
qipverome
時間:
2018-12-19 20:04
謝謝分享。
作者:
jetty-9
時間:
2018-12-26 19:01
盜別人的有意思?
作者:
yahuiwang
時間:
2019-1-8 10:07
真心的不錯,,,,,謝謝分享
作者:
hbpu
時間:
2019-1-10 20:25
感覺挺有用的
作者:
ikon路
時間:
2019-1-14 10:49
我要下載啊啊啊啊啊。。。。
作者:
帝無心223
時間:
2019-2-16 22:19
贊一個
作者:
1907436340
時間:
2019-3-11 20:02
給力 贊
作者:
jieggee
時間:
2019-4-2 19:33
想要下載可是限于黑幣不夠啊
作者:
jianing2007
時間:
2019-7-5 09:21
謝謝LZ,正好在學習這個,下載來學習學習。
作者:
jianing2007
時間:
2019-7-5 09:30
已下載,正好是想要的。謝謝LZ
作者:
Curry1
時間:
2019-7-24 13:58
怎么27個error
作者:
Curry1
時間:
2019-7-24 14:08
27error,怎么沒有 core_cm3.h ,求大神指點
作者:
lxgdd
時間:
2019-11-30 10:53
大佬,真N
作者:
不つ你不恨
時間:
2019-12-5 16:40
學習了
作者:
zcadqe2453
時間:
2019-12-23 10:27
可以的
作者:
知行合一1992
時間:
2020-2-12 17:08
請問單片機是什么型號的
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1