智能车制作
标题: stm32红外传感器避障小车 [打印本页]
作者: tajiong 时间: 2017-9-30 19:19
标题: stm32红外传感器避障小车
<span]
<span]
<span]#define PA1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)
<span]
<span]{
<span] RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
<span] GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
<span] GPIO_Init(GPIOA,&GPIO_InitStructure);
<span] GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
<span] GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
<span]}
<span]void NVIC_Configuration()
<span] NVIC_InitTypeDef NVIC_InitStructure;
<span] NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
<span] NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
<span] NVIC_Init(&NVIC_InitStructure);
<span]
<span]{
<span] RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
<span] TIM_TimeBaseStructure.TIM_Prescaler = 7200;
<span] TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
<span] TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
<span] NVIC_Configuration();//
<span]}
<span]void TIM3_IRQHandler(void)//
<span] if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET)
<span] void avoiding();
<span] TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
<span]
<span]{
<span] GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6);
<span]
<span]{
<span] GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_5);
<span]
<span]{
<span] GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_3);
<span]
<span]{
<span] if((PA0 == 0)&&(PA1 == 1)&&(PA2 == 0)) left();
<span] if(((PA0 == 1)&&(PA1 ==1)&&(PA2 ==0))||
<span] if(((PA0 == 0)&&(PA1 ==1)&&(PA2 ==1))||
<span] if((PA0 == 0)&&(PA1 == 0)&&(PA1 == 0)) right();
<span]
<span]
<span]{
<span] GPIO_Configuration();
<span] while(1)
<span] GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_5);
<span] }
<span]
我的小车只执行
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6);
}
不知道怎么办,求各位大神帮帮忙,[attach]91356[/attach]
作者: tajiong 时间: 2017-9-30 19:21
#include "stm32f10x.h" // Device header
#define PA0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define PA1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)
#define PA2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)
void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void NVIC_Configuration()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM_Configuration()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseStructure.TIM_Period = 100-1;//10msòç3ö»ò¸üDÂ
TIM_TimeBaseStructure.TIM_Prescaler = 7200;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
NVIC_Configuration();//¶¨ê±Æ÷ÖD¶ÏÅäÖÃ
TIM_Cmd(TIM3,ENABLE);
}
void TIM3_IRQHandler(void)//¶¨ê±Æ÷ÖD¶Ï
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET)
{
void avoiding();
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
void up()
{
GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6);
}
void left()
{
GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_5);
}
void right()
{
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_3);
}
void avoiding()
{
if((PA0 == 1)&&(PA1 == 1)&&(PA2 == 1)) up();
if((PA0 == 0)&&(PA1 == 1)&&(PA2 == 0)) left();
if((PA0 == 1)&&(PA1 ==0)&&(PA2 ==1)) left();
if(((PA0 == 1)&&(PA1 ==1)&&(PA2 ==0))||
((PA0 == 1)&&(PA1 ==0)&&(PA2 ==0))) left();
if(((PA0 == 0)&&(PA1 ==1)&&(PA2 ==1))||
((PA0 == 0)&&(PA1 ==0)&&(PA2 ==1))) right();
if((PA0 == 0)&&(PA1 == 0)&&(PA1 == 0)) right();
}
int main()
{
GPIO_Configuration();
TIM_Configuration();
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_6);
}
}
作者: tajiong 时间: 2017-9-30 19:22
前面的是错的
作者: scglyh 时间: 2017-9-30 20:17
先去看看微机原理的中断那儿吧
作者: じ~凝眸处 时间: 2017-10-9 19:14
:):):):):):)
作者: じ~凝眸处 时间: 2017-10-9 19:14
:@
:o
作者: cankun1314 时间: 2017-10-9 23:57
欢迎光临 智能车制作 (http://111.231.132.190/) |
Powered by Discuz! X3.2 |