久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32尋跡小車程序理解的問(wèn)題
[打印本頁(yè)]
作者:
wanlong
時(shí)間:
2019-5-15 17:12
標(biāo)題:
STM32尋跡小車程序理解的問(wèn)題
這個(gè)是stm32尋跡控制輪子程序但是我到現(xiàn)在都沒讀懂他到底定義是哪四個(gè)io口,PA6,PA7 PB8,PB9,OR,PC6,PC7,PC8,PC9,求大神指點(diǎn)
#include "motor_control.h"
#include "SysTick.h"
#include "UltrasonicWave.h"
#include "pwm_output.h"
#include "usart1.h"
#define ONWARD 1
#define BACKWARD 0
extern vu8 count;
extern vu32 averge_distance;
vu8 left,right,middle;
vu32 S2;
vu32 S4;
vu32 S1;
vu32 timer;
//u16 Pwm_Right;
//u16 Pwm_Left;
/**************************************
函數(shù)名 :Control_GPIO_Config
函數(shù)描述:配置Control小車用到的I/O口
輸入?yún)?shù):無(wú)
輸出參數(shù):無(wú)
**************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIOA_InitStructure,GPIOB_InitStructure; //定義兩個(gè)GPIO_InitTypeDef類型的結(jié)構(gòu)體
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOA外設(shè)時(shí)鐘
GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; //選擇要控制的GPIOA引腳
GPIOA_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //設(shè)置引腳模式為推挽式輸出
GPIOA_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設(shè)置引腳速度為50Mhz
GPIO_Init(GPIOA,&GPIOA_InitStructure); //調(diào)用庫(kù)函數(shù)初始化 GPIOA
//剛開始停止電機(jī)轉(zhuǎn)動(dòng)
GPIO_SetBits(GPIOC,GPIO_Pin_8|GPIO_Pin_9);
//RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE); //開啟GPIOB的時(shí)鐘
GPIOB_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //選擇要控制的GPIOB引腳
GPIOB_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //配置引腳模式為推挽式輸出
GPIOB_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設(shè)置引腳速度為50MHz
GPIO_Init(GPIOC,&GPIOB_InitStructure); //調(diào)用初始化GPIOB
GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7); //啟動(dòng)關(guān)閉電機(jī)
}
/*****************************************
函數(shù)名 : Control_GPIOE_Config
輸入描述 : 對(duì)傳感器輸入信號(hào)的管腳配置
輸入?yún)?shù) :無(wú)
輸出參數(shù) :無(wú)
******************************************/
void Control_GPIOE_Config(void)
{
GPIO_InitTypeDef GPIOB_InitStructure; //定義GPIOE管腳結(jié)構(gòu)體變量
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);//開啟GPIOE外設(shè)時(shí)鐘
GPIOB_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4;
GPIOB_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //輸入采用浮空輸入
GPIO_Init(GPIOB,&GPIOB_InitStructure);
}
/********************************************
* 函數(shù)名 :TIM3_GPIO_Config
* 描述 :配置TIM3復(fù)用輸出PWM時(shí)用到的I/O
* 輸入 :無(wú)
* 輸出 :無(wú)
* 調(diào)用 :內(nèi)部調(diào)用
*********************************************/
void TIM3_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //配置GPIOC的管腳
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //開啟TIM3時(shí)鐘
/**配置pwm輸出的對(duì)應(yīng)GPIO管腳****/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽式輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*****************************************************************************
*文件名 : TIM_Configuration
*描述 : TIM4 初始化
* 輸入 : 無(wú)
* 輸出 : 無(wú)
* 返回 : 無(wú)
******************************************************************************/
void TIM3_Configuration(u16 CCR_Val_12,u16 CCR_Val_34)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//CCR_Val_12 = 900;
//CCR_Val_34 = 900;
/* -----------------------------------------------------------------------
TIM3 Configuration: generate 2 PWM signals with 2 different duty cycles:
TIM3CLK = 36 MHz, Prescaler = 0x0, TIM3 counter clock = 36 MHz
TIM3 ARR Register = 999 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
TIM3 Frequency = 36 KHz.
TIM3 Channel1 duty cycle = (CCR_Val_12/ TIM3_ARR)* 100 = 50%
TIM3 Channel1 duty cycle = (CCR_Val_34/ TIM3_ARR)* 100 = 50%
----------------------------------------------------------------------- */
/***通道1的配置*****/
TIM_TimeBaseStructure.TIM_Period = 999; //設(shè)定總周期值
TIM_TimeBaseStructure.TIM_Prescaler = 0; //設(shè)置預(yù)分頻:不預(yù)分頻,即為36MHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //設(shè)置時(shí)鐘分頻系數(shù):不分頻
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置為PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR_Val_12; //設(shè)置跳變值,當(dāng)計(jì)數(shù)器計(jì)數(shù)到這個(gè)值時(shí),電平發(fā)生跳變
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //當(dāng)定時(shí)器計(jì)數(shù)值小于CCR_Val時(shí)為高電平
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR_Val_34; //設(shè)置通道3的電平跳變值,輸出另外一個(gè)占空比的PWM
TIM_OC1Init(TIM3, &TIM_OCInitStructure); //使能通道1
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //使能通道2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
/***通道3的配置*****/
TIM_ARRPreloadConfig(TIM3, ENABLE); // 使能TIM3重載寄存器ARR
TIM_Cmd(TIM3, ENABLE); //使能定時(shí)器3
// TIM_OC3Init(TIM3, &TIM_OCInitStructure); //使能通道3
// TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
// TIM_OC4Init(TIM3, &TIM_OCInitStructure); //使能通道4
// TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
//
}
/*************壁障前進(jìn)***********/
void Forward_run(void)
{
/*左側(cè)輪子停轉(zhuǎn)*/
// Pwm_Left = 900;
// Pwm_Right = 900;
TIM3_Configuration(700,700);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);//0
GPIO_SetBits(GPIOC,GPIO_Pin_9);//1
GPIO_ResetBits(GPIOC,GPIO_Pin_6);//0
GPIO_SetBits(GPIOC,GPIO_Pin_7);//1
}
/*************壁障后退***********/
void Backward_run(void)
{
/*左側(cè)輪子停轉(zhuǎn)*/
// Pwm_Left = 900;
// Pwm_Right = 900;
TIM3_Configuration(700,700);
GPIO_SetBits(GPIOC,GPIO_Pin_8);//1
GPIO_ResetBits(GPIOC,GPIO_Pin_9);//0
GPIO_SetBits(GPIOC,GPIO_Pin_6);//1
GPIO_ResetBits(GPIOC,GPIO_Pin_7);//0
}
/*************壁障左轉(zhuǎn)***********/
void Left_turn(void)
{
/*左側(cè)輪子停轉(zhuǎn)*/
// Pwm_Left = 900;
// Pwm_Right = 900;
TIM3_Configuration(700,700);
// GPIO_ResetBits(GPIOB,GPIO_Pin_1);//0 //右電機(jī)轉(zhuǎn)動(dòng)
// GPIO_SetBits(GPIOB,GPIO_Pin_0);//1
GPIO_SetBits(GPIOC,GPIO_Pin_8); //左電機(jī)停止
GPIO_SetBits(GPIOC,GPIO_Pin_9);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);//0 //右電機(jī)轉(zhuǎn)動(dòng)
GPIO_SetBits(GPIOC,GPIO_Pin_7);//1
}
/*************壁障右轉(zhuǎn)***********/
void Right_turn(void)
{
/***右側(cè)停轉(zhuǎn)*/
// Pwm_Left = 900;
// Pwm_Right = 900;
TIM3_Configuration(700,700);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);//0 //左電機(jī)轉(zhuǎn)動(dòng)
GPIO_SetBits(GPIOC,GPIO_Pin_9);//1
GPIO_SetBits(GPIOC,GPIO_Pin_6); //右電機(jī)停止
GPIO_SetBits(GPIOC,GPIO_Pin_7);
// GPIO_SetBits(GPIOB,GPIO_Pin_2);//1
// GPIO_ResetBits(GPIOB,GPIO_Pin_4);//0
}
/*************停止**********/
void Stop(void)
{
/*左側(cè)輪子停轉(zhuǎn)*/
// Pwm_Left = 0;
// Pwm_Right = 0;
TIM3_Configuration(0,0);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
}
/*************循跡前進(jìn)***********/
void Xunji_Forward_run(void)
{
/*左側(cè)輪子停轉(zhuǎn)*/
// Pwm_Left = 900;
// Pwm_Right = 900;
TIM3_Configuration(400,400);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);//0
GPIO_SetBits(GPIOC,GPIO_Pin_9);//1
GPIO_ResetBits(GPIOC,GPIO_Pin_6);//0
GPIO_SetBits(GPIOC,GPIO_Pin_7);//1
}
/*************循跡左轉(zhuǎn)***********/
void Xunji_Left_turn(void)
{
/*左側(cè)輪子停轉(zhuǎn)*/
// Pwm_Left = 900;
// Pwm_Right = 900;
TIM3_Configuration(400,400);
// GPIO_ResetBits(GPIOB,GPIO_Pin_1);//0 //右電機(jī)轉(zhuǎn)動(dòng)
// GPIO_SetBits(GPIOB,GPIO_Pin_0);//1
GPIO_SetBits(GPIOC,GPIO_Pin_8); //左電機(jī)停止
GPIO_SetBits(GPIOC,GPIO_Pin_9);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);//0 //右電機(jī)轉(zhuǎn)動(dòng)
GPIO_SetBits(GPIOC,GPIO_Pin_7);//1
}
/*************循跡右轉(zhuǎn)***********/
void Xunji_Right_turn(void)
{
/***右側(cè)停轉(zhuǎn)*/
// Pwm_Left = 900;
// Pwm_Right = 900;
TIM3_Configuration(400,400);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);//0 //左電機(jī)轉(zhuǎn)動(dòng)
GPIO_SetBits(GPIOC,GPIO_Pin_9);//1
GPIO_SetBits(GPIOC,GPIO_Pin_6); //右電機(jī)停止
GPIO_SetBits(GPIOC,GPIO_Pin_7);
// GPIO_SetBits(GPIOB,GPIO_Pin_2);//1
// GPIO_ResetBits(GPIOB,GPIO_Pin_4);//0
}
/*************循跡停止***********/
void Xunji_Stop(void)
{
/*左側(cè)輪子停轉(zhuǎn)*/
// Pwm_Left = 0;
// Pwm_Right = 0;
TIM3_Configuration(400,400);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
}
void COMM(void) //方向函數(shù)
{
Degree(20,1);
// TIM_SetCompare1(TIM2,11);
Delay_ms(700);
Average_Distance();
S2=averge_distance;
Degree(150,1);
// TIM_SetCompare1(TIM2,4);
Delay_ms(700);
Average_Distance();
S4=averge_distance;
Degree(85,1);
// TIM_SetCompare1(TIM2,8);
Delay_ms(700);
S1=averge_distance;
if(S2<30||S4<30) //只要左右各有距離小于20CM小車后退
{
Backward_run(); //后退
Delay_ms(700);
}
if(S2>S4)
{
Right_turn(); //車的左邊比車的右邊距離小,右轉(zhuǎn)
Delay_ms(700);
}
else
{
Left_turn(); //車的左邊比車的右邊距離大,左轉(zhuǎn)
Delay_ms(700);
}
}
/***************************************************
* 函數(shù)名 : Auto_run
* 描述 : 避障程序
* 輸入 : 無(wú)
* 輸出 : 無(wú)
* 返回 : 無(wú)
****************************************************/
void Auto_run(void) //檢測(cè)障礙
{
Average_Distance();
if(averge_distance<30)
{
Stop();//小車停止
COMM(); //方向函數(shù)
}
else
{
if(averge_distance>30)
{
Forward_run();
}
}
}
/***************************************************
* 函數(shù)名 : 循跡程序
* 輸入 : 無(wú)
* 輸出 : 無(wú)
* 返回 : 無(wú)
****************************************************/
void Xunji_run(void) //檢測(cè)障礙
{
//四路尋跡傳感器有信號(hào)(白線)為0 沒有信號(hào)(黑線)為1
if(Out1==0 && Out2==0&&Out3==0 &&Out4==0 )
{
Xunji_Forward_run();//實(shí)現(xiàn)小車的前進(jìn)
}
else if(Out1==1 && Out2==0&&Out3==0 &&Out4==1 )
{
Xunji_Stop();//實(shí)現(xiàn)小車的停止
}
else if(Out1==0 && Out2==1&&Out3==1 &&Out4==0 )
{
Xunji_Forward_run();//實(shí)現(xiàn)小車的前進(jìn)
}
else if(Out1==0 && Out2==1&&Out3==0 &&Out4==0 )
{
// TurnRight();//實(shí)現(xiàn)小車的左轉(zhuǎn)
Xunji_Left_turn();
}
else if(Out1==1 && Out2==0&&Out3==0 &&Out4==0 )
{
// TurnRight();//實(shí)現(xiàn)小車的左轉(zhuǎn)
Xunji_Left_turn();
}
else if(Out1==0 && Out2==0&&Out3==1 &&Out4==1 )
{
Xunji_Right_turn();//實(shí)現(xiàn)小車的前進(jìn)
}
else if(Out1==0 && Out2==1&&Out3==1 &&Out4==1 )
{
// TurnRight();//實(shí)現(xiàn)小車的左轉(zhuǎn)
Xunji_Left_turn();
}
else if(Out1==0 && Out2==0&&Out3==0 &&Out4==1 )
{
// TurnLeft();//實(shí)現(xiàn)小車的右轉(zhuǎn)
Xunji_Right_turn();//實(shí)現(xiàn)小車的左轉(zhuǎn)
}
else if(Out1==0 && Out2==0&&Out3==1 &&Out4==0 )
{
// TurnLeft();//實(shí)現(xiàn)小車的右轉(zhuǎn)
Xunji_Right_turn();//實(shí)現(xiàn)小車的左轉(zhuǎn)
}
else if(Out1==1 && Out2==1&&Out3==0 &&Out4==0 )
{
// RunToForward();//實(shí)現(xiàn)小車的前進(jìn)
Xunji_Left_turn();
}
else if(Out1==1 && Out2==1&&Out3==1 &&Out4==0 )
{
// TurnLeft();//實(shí)現(xiàn)小車的右轉(zhuǎn)
Xunji_Right_turn();//實(shí)現(xiàn)小車的左轉(zhuǎn)
}
else
{
Xunji_Stop();//實(shí)現(xiàn)小車的停止
}
}
復(fù)制代碼
作者:
wanlong
時(shí)間:
2019-5-19 16:38
沒有大佬解答一下嗎?
作者:
玉米里脊一粒
時(shí)間:
2019-6-25 13:53
6,7,8,9吧
作者:
葉春啊
時(shí)間:
2021-4-1 19:38
根據(jù)主板原理圖看接口
作者:
要精通
時(shí)間:
2023-3-22 20:26
請(qǐng)問(wèn)你有完整的STM32尋跡小車程序嗎?
作者:
glinfei
時(shí)間:
2023-3-23 08:38
單單從這兩句看
//剛開始停止電機(jī)轉(zhuǎn)動(dòng)
GPIO_SetBits(GPIOC,GPIO_Pin_8|GPIO_Pin_9);
顯然是讓 PC8和9 置高,但前邊又沒給GPIOC 初始化,所以不是你迷惑,是程序問(wèn)題。
作者:
lihuajie32
時(shí)間:
2023-3-23 09:27
既然是pin 那就是唯一,看原理圖或芯片手冊(cè)
作者:
最后一個(gè)夏天1
時(shí)間:
2023-3-23 14:36
19年的帖子....,這是哪個(gè)大神找出來(lái)的
作者:
天ノ憶
時(shí)間:
2023-3-23 16:01
這程序讓我想起了我以前的同事,不光代碼跟注釋對(duì)不上號(hào),變量的命名也跟操作的外設(shè)對(duì)不上號(hào),配置跟思路那必然也是沒對(duì)上號(hào)。我接手他的程序簡(jiǎn)直就像到了地獄
你這程序從結(jié)果上來(lái)看,開了GPIOB和GPIOC的時(shí)鐘,后面的TIM3函數(shù)里配置了GPIOA的時(shí)鐘,配置有效的是PA6,PA7,PB0,PB1PB3PB4,PC6,PC7,如果程序用的時(shí)候TIM_GPIO這個(gè)函數(shù)放在 GPIO_Configuration前面的話,PA8,PA9也是能用的
一句話,爛程序,不該出現(xiàn)在這個(gè)世界
謝謝樓主,讓我回憶起了地獄
作者:
要精通
時(shí)間:
2023-4-2 21:52
請(qǐng)問(wèn)可以發(fā)一下電機(jī)驅(qū)動(dòng)的代碼嗎
作者:
li64331218
時(shí)間:
2023-4-2 22:34
哈哈,這一看就是用別的程序改的。注釋沒有更改。根據(jù)GPIO 時(shí)鐘使能,應(yīng)該是用C口的6、7、8、9來(lái)控制的。
作者:
哇哇哇哇阿松大
時(shí)間:
2023-4-3 14:49
應(yīng)該是用C口的6、7、8、9
作者:
雪糕yya
時(shí)間:
2023-4-3 16:05
程序從結(jié)果上來(lái)看,開了GPIOB和GPIOC的時(shí)鐘,后面的TIM3函數(shù)里配置了GPIOA的時(shí)鐘,配置有效的是PA6,PA7,PB0,PB1PB3PB4,PC6,PC7,如果程序用的時(shí)候TIM_GPIO這個(gè)函數(shù)放在 GPIO_Configuration前面的話,PA8,PA9也是能用的
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久久久成人
|
欧美老妇交乱视频
|
国产免费一区二区
|
精品国产乱码久久久
|
日韩在线欧美
|
久久99精品久久久
|
一区二区国产精品
|
欧美国产视频一区二区
|
黄色成人免费看
|
国产日韩电影
|
一区二区三区av
|
亚洲精品黄
|
精品免费国产视频
|
天天射色综合
|
日本精品视频
|
一区二区三区免费
|
成人免费视频在线观看
|
毛片软件
|
青青久草
|
日韩精品 电影一区 亚洲
|
色综合美女
|
国产中文区二幕区2012
|
超碰成人在线观看
|
色久电影
|
视频一二区
|
一区二区视频在线
|
欧美日韩国产免费
|
中文字幕成人
|
久久久久久蜜桃一区二区
|
超碰男人天堂
|
国产精品久久久乱弄
|
99这里只有精品视频
|
亚洲精品三级
|
欧美黄色一区
|
国产羞羞视频在线观看
|
日韩精品视频一区二区三区
|
福利久久
|
国产欧美在线观看
|
欧美黄色片在线观看
|
国产伦精品一区二区三区高清
|
国产在线精品一区二区三区
|