赞
踩
IN2(High);
}
void Motor_1_NRun(void)
{
IN1(High);
IN2(Low);
}
void Motor_2_STOP(void)
{
IN3(High);
IN4(High);
}
void Motor_2_PRun(void)
{
IN3(Low);
IN4(High);
}
void Motor_2_NRun(void)
{
IN3(High);
IN4(Low);
}
#ifndef __MOTOR1_H
#define __MOTOR1_H
#include “stm32f10x.h”
#include “stm32f10x_gpio.h”
#define High 1
#define Low 0
#define IN1(a) if (a) \
GPIO_SetBits(GPIOF,GPIO_Pin_0);\
else \
GPIO_ResetBits(GPIOF,GPIO_Pin_0)
#define IN2(a) if (a) \
GPIO_SetBits(GPIOF,GPIO_Pin_1);\
else \
GPIO_ResetBits(GPIOF,GPIO_Pin_1)
#define IN3(a) if (a) \
GPIO_SetBits(GPIOF,GPIO_Pin_2);\
else \
GPIO_ResetBits(GPIOF,GPIO_Pin_2)
#define IN4(a) if (a) \
GPIO_SetBits(GPIOF,GPIO_Pin_3);\
else \
GPIO_ResetBits(GPIOF,GPIO_Pin_3)
void Motor_12_Config(void);
void Motor_1_STOP(void);
void Motor_1_PRun(void);
void Motor_1_NRun(void);
void Motor_2_STOP(void);
void Motor_2_PRun(void);
void Motor_2_NRun(void);
#endif
#include “PWM.h”
#include “stm32f10x.h”
/* 函 数 名 : pwm_init
函数功能 : IO端口及TIM3初始化函数 */
void PWM_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明一个结构体变量,用来初始化定时器
TIM_OCInitTypeDef TIM_OCInitStructure;//根据TIM_OCInitStruct中指定的参数初始化外设TIMx
/* 开启时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;// PC6
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);
//TIM3定时器初始化
TIM_TimeBaseInitStructure.TIM_Period = 199; //PWM 频率=72000/(199+1)=36Khz//设置自动重装载寄存器周期的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//设置用来作为TIMx时钟频率预分频值
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射 //pC6
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC1Init(TIM3,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的预装载寄存器
TIM_Cmd(TIM3,ENABLE);
}
(这部分代码参照原子视频代码即可!)
因为文章只是分享一个大概,具体的控制外设CSDN上也有很多可以参考的文章,大家有需要可以自行搜索查看,有问题也可以私信我)
这里只是示意图,比较简略,只为了展示元件之间的接线,具体的供电根据自己的情况,建议L298N、STM32和舵机全部单独供电,避免产生影响,需要注意的是共地的问题,有基础的应该不难理解!!
#include “stm32f10x.h” //官方库
#include “stm32f10x_gpio.h”
#include “stm32f10x_rcc.h”
#include “sys.h”
#include “delay.h”
#include “motor.h”
#include “PWM.h”
#include “led.h”
#include “usart.h”
#include “beep.h”
int main()
{
u16 RxData;
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
Motor_12_Config(); //电机的初使化
PWM_Init(); //舵机初始化
BEEP_Init(); //初始化蜂鸣器端口
delay_init(); //延时函数初始化
LED_Init(); //初始化LED端口
while(1)
{
if(USART_GetFlagStatus( USART1, USART_FLAG_RXNE))
{
USART_ClearFlag(USART1, USART_FLAG_RXNE);
RxData=USART_ReceiveData( USART1);
}
if(RxData == 0x01){ //前进
//GPIO_ResetBits(GPIOE,GPIO_Pin_5); //LED1对应引脚GPIOE.5拉低,亮 等同LED1=0;
//GPIO_ResetBits(GPIOB,GPIO_Pin_5);//LED0对应引脚GPIOB.5拉低,亮 等同LED0=0
//GPIO_SetBits(GPIOB,GPIO_Pin_8);
Motor_1_PRun();
Motor_2_PRun();
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
最新整理面试题
上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题
最新整理电子书
最新整理大厂面试文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Motor_2_PRun();
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
最新整理面试题
[外链图片转存中…(img-KTjgl0NU-1714207379702)]
上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题
最新整理电子书
[外链图片转存中…(img-GqtIF2dN-1714207379703)]
最新整理大厂面试文档
[外链图片转存中…(img-3TwdkibL-1714207379703)]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。