2. Output
Output中应创建HEX可执行文件
3. C/C++
C/C++中应定义宏和包含文件路径
4. Debug
若选用 ST-link 或 J-link 还是其他下载器or串口,都需要事先安装相应的驱动和配置相关环境,这里我以ST-link为例配置相关环境
三、项目管理与代码实现
1. 项目结构
2. 工程管理
应在相应的工程文件下面添加上对应的.c文件
3. 具体文件
以下我主要说明几个比较重要的文件
xunji.c
#include "xunji.h"
#include "stm32f10x.h"
void motor\_gpio()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|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);
}
void xunji\_gpio()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO\_Init(GPIOA, &GPIO_InitStructure);
}
void pwm()
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO\_Init(GPIOB, &GPIO_InitStructure);
RCC\_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器4时钟
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB时钟
TIM_TimeBaseStructure.TIM_Period =99; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck\_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM\_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OCInitStructure.TIM_Pulse=0;
TIM\_OC1Init(TIM4, &TIM_OCInitStructure);
TIM\_OC3Init(TIM4, &TIM_OCInitStructure);
TIM\_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4在CCR1上的预装载寄存器
TIM\_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4在CCR3上的预装载寄存器
TIM\_Cmd(TIM4, ENABLE); //使能TIM4
}
void run()
{
TIM\_SetCompare1(TIM4,30);
TIM\_SetCompare3(TIM4,30);
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void back()
{
TIM\_SetCompare1(TIM4,70);
TIM\_SetCompare3(TIM4,70);
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void right()
{
TIM\_SetCompare1(TIM4,0);
TIM\_SetCompare3(TIM4,30);
IN1 = 1;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void left()
{
TIM\_SetCompare1(TIM4,30);
TIM\_SetCompare3(TIM4,0);
IN1 = 0;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void stop()
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
xunji.h
#ifndef \_\_xunji\_H
#define \_\_xunji\_H
#include "sys.h"
#define IN1 PBout(0)
#define IN2 PBout(1)
#define IN3 PBout(10)
#define IN4 PBout(11)
#define LEFT\_ONE PAin(3)
#define LEFT\_TWO PAin(7)
void run(void);
void left(void);
void right(void);
void back(void);;
void stop(void);
void motor\_gpio(void);
void xunji\_gpio(void);
void pwm(void);
#endif
main.c
#include "stm32f10x.h"
#include "xunji.h"
#include "delay.h"
void Init()
{
TIM\_SetCompare1(TIM4,25);
TIM\_SetCompare3(TIM4,25);
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
int main(void)
{
motor\_gpio();
xunji\_gpio();
pwm();
delay\_init();
Init();
while(1)
{
if(LEFT_ONE==0&&LEFT_TWO==0)
{
run();
}
else if(LEFT_ONE==0&&LEFT_TWO==1)
{
right();
}
else if(LEFT_ONE==1&&LEFT_TWO==0)
{
left();
}
else if(LEFT_ONE==1&&LEFT_TWO==1)
{
run();
}
else
stop();
}
}
总结
本节是以STM32F103C8T6最小系统为CPU,通过一些外围电路和软件编程实现小车红外循迹的功能。整个设计过程中最大的特点是利用简单的理论原理将红外循迹模块、L298N驱动模块、51单片机这三个模块有效的结合起来,利用红外循迹原理与pwm调节占空比的简单结合实现对小车红外循迹奠定编程理论基础,提高了效率,降低了编程的复杂度,具有很强的研究的意义,智能化的发展促使了智能小车往功能更加强大的方向发展。
项目源码
链接:https://pan.baidu.com/s/1\_-j6TJepvMkMjUdHvDWS6w
提取码:s0hj
一键三连啦😊
技术交流可加下方wx联系👇👇👇
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!