当前有个小需求。主控STM32f103C8T6通过两个引脚控制一个电机的正反转,使用两种逻辑控制电机正反转,
一个是当收到串口传来的"OPEN"时,控制电机正转1s左右,然后停住,等30s后再控制反转1s。另一个是有个按钮,按下以后也是控制电机正转1s左右,然后停住,等30s后再控制反转1s。
需求分析
正反转就是控制引脚高低电平
一高一低或者一低一高
然后可以通过定时器进行计时,控制转多少秒
其实简单的话可以直接线程阻塞,就是说先正转1s,
然后delay 1000ms,然后循环等待。
他这个的使用场景,就是类似于小区门禁,
电机正转就是把门打开
等30s以后把门关上
——浩哥
发送Open需要配置串口
按键的话就是检测引脚高低电平,然后判断处理
首先,需要配置串口通信和按钮输入的引脚。 假设将串口连接到USART1,并将按钮连接到GPIOA的第0号引脚。
- 引入头文件和定义引脚宏:
#include "stm32f10x.h"
#define MOTOR_PIN_1 GPIO_Pin_0
#define MOTOR_PIN_2 GPIO_Pin_1
#define BUTTON_PIN GPIO_Pin_2
这里包含了针对STM32F103C8T6的头文件,并定义了电机引脚1(MOTOR_PIN_1)、电机引脚2(MOTOR_PIN_2)和按钮引脚(BUTTON_PIN)的宏。
2.全局变量:
volatile uint8_t command_received = 0;
这个全局变量用于指示是否接收到了控制命令。 在主循环中,当为1时执行电机正反转操作。command_received
command_received
3.
GPIO配置
void GPIO_Configuration(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = MOTOR_PIN_1 | MOTOR_PIN_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = BUTTON_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
该函数用于配置GPIO引脚。 在这个例子中,我们将GPIOA的引脚0和引脚1配置为输出(用于控制电机正反转),将GPIOB的引脚2配置为输入(用于接收按钮的状态)。
4.串口配置:
void USART_Configuration(void)
{
// 根据需要配置串口接收功能
// ...
}
这个函数用于配置串口接收功能。 由于具体的串口配置会根据实际需求而变化,所以你需要根据自己的情况进行配置。
5.定时器配置:
void TIM_Configuration(void)
{
// 根据需要配置定时器
// ...
}
这个函数用于配置定时器。 与串口配置类似