第一种办法 定义TIMEBT10的时候转动会更快 能看到流水灯的 几乎常量了
代码如下
借此机会练习 集中控制
void ctl_only_PA1(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA2(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA3(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA4(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}
#define TIMEBT 100
void MotorCW( void )
{
ctl_only_PA1(); HAL_Delay(TIMEBT);
ctl_only_PA2(); HAL_Delay(TIMEBT);
ctl_only_PA3(); HAL_Delay(TIMEBT);
ctl_only_PA4(); HAL_Delay(TIMEBT);
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
SHOWME
while (1)
{
/* USER CODE END WHILE */
MotorCW();
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
方法2
void ctl_only_PA1(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA2(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA3(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}
void ctl_only_PA4(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}
#define TIMEBT 1000
void MotorCW( void )
{
ctl_only_PA1(); HAL_Delay(TIMEBT);
ctl_only_PA2(); HAL_Delay(TIMEBT);
ctl_only_PA3(); HAL_Delay(TIMEBT);
ctl_only_PA4(); HAL_Delay(TIMEBT);
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
SHOWME
while (1)
{
/* USER CODE END WHILE */
MotorCW();
/* USER CODE BEGIN 3 */
}
/* USER CODE END
方法3
void ctl_only_PA1(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA12(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA2(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA23(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA3(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
void ctl_only_PA34(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}
void ctl_only_PA4(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}
void ctl_only_PA41(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}
#define TIMEBT 1
void MotorCW( void )
{
ctl_only_PA1(); HAL_Delay(TIMEBT);
ctl_only_PA12(); HAL_Delay(TIMEBT);
ctl_only_PA2(); HAL_Delay(TIMEBT);
ctl_only_PA23(); HAL_Delay(TIMEBT);
ctl_only_PA3(); HAL_Delay(TIMEBT);
ctl_only_PA34(); HAL_Delay(TIMEBT);
ctl_only_PA4(); HAL_Delay(TIMEBT);
ctl_only_PA41(); HAL_Delay(TIMEBT);
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
SHOWME
while (1)
{
/* USER CODE END WHILE */
MotorCW();
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
https://detail.tmall.com/item.htm?id=41303683115&ali_refid=a3_430582_1006:1109983619:N:UpvGo5+Uk3YFP2Kf89RvMw==:1b87efd2480c708b3ea3500b8d61ac6b&ali_trackid=1_1b87efd2480c708b3ea3500b8d61ac6b&spm=a230r.1.14.11
https://blog.csdn.net/qq_20222919/article/details/111604261
准备PA1-2-3-4 对应IN1 2 3 4控制电机
就是流水灯
充电宝给步进电机驱动器上电 它本质是放大电路
需要4个GPIO即可
集中控制
void ctl_only_PA1(void)
{
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
GPIOA->BSRR = GPIO_PIN_1|((GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4)<<16);
}
void ctl_only_PA2(void)
{
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
GPIOA->BSRR = GPIO_PIN_2|((GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4)<<16);
}
void ctl_only_PA3(void)
{
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
GPIOA->BSRR = GPIO_PIN_3|((GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4)<<16);
}
void ctl_only_PA4(void)
{
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
GPIOA->BSRR = GPIO_PIN_4|((GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3)<<16);
}
#define TIMEBT 4
void MotorCW( void )
{
ctl_only_PA1(); HAL_Delay(TIMEBT);
ctl_only_PA2(); HAL_Delay(TIMEBT);
ctl_only_PA3(); HAL_Delay(TIMEBT);
ctl_only_PA4(); HAL_Delay(TIMEBT);
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
SHOWME
while (1)
{
/* USER CODE END WHILE */
MotorCW();
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
结论
uln2003 是放大芯片 没有啥别的 IO可以驱动电机了 以前就是LED
也就是电机是比LED稍微高阶一点点的东西 简单的
++++++++++++++PI+++++++++++++++
树莓派操作 也是一样 的
方式1 比较慢
package main
import (
"fmt"
"github.com/stianeikeland/go-rpio/v4"
"os"
"time"
)
var (
pin1 = rpio.Pin(26)
pin2 = rpio.Pin(19)
pin3 = rpio.Pin(13)
pin4 = rpio.Pin(6)
)
func in1(){
pin1.Write(1)
pin2.Write(0)
pin3.Write(0)
pin4.Write(0)
}
func in2(){
pin1.Write(0)
pin2.Write(1)
pin3.Write(0)
pin4.Write(0)
}
func in3(){
pin1.Write(0)
pin2.Write(0)
pin3.Write(1)
pin4.Write(0)
}
func in4(){
pin1.Write(0)
pin2.Write(0)
pin3.Write(0)
pin4.Write(1)
}
func main() {
// Open and map memory to access gpio, check for errors
if err := rpio.Open(); err != nil {
fmt.Println(err)
os.Exit(1)
}
// Unmap gpio memory when done
defer rpio.Close()
// Set pin to output mode
pin1.Output()
pin2.Output()
pin3.Output()
pin4.Output()
// Toggle pin 20 times
for x := 0; x < 200; x++ {
in1()
time.Sleep(time.Second / 100)
in2()
time.Sleep(time.Second / 100)
in3()
time.Sleep(time.Second / 100)
in4()
time.Sleep(time.Second / 100)
}
}
下面方式2抖动小一点 也不是很快
package main
import (
"fmt"
"github.com/stianeikeland/go-rpio/v4"
"os"
"time"
)
var (
pin1 = rpio.Pin(26)
pin2 = rpio.Pin(19)
pin3 = rpio.Pin(13)
pin4 = rpio.Pin(6)
)
func in1(){
pin1.Write(1)
pin2.Write(1)
pin3.Write(0)
pin4.Write(0)
}
func in2(){
pin1.Write(0)
pin2.Write(1)
pin3.Write(1)
pin4.Write(0)
}
func in3(){
pin1.Write(0)
pin2.Write(0)
pin3.Write(1)
pin4.Write(1)
}
func in4(){
pin1.Write(1)
pin2.Write(0)
pin3.Write(0)
pin4.Write(1)
}
func main() {
// Open and map memory to access gpio, check for errors
if err := rpio.Open(); err != nil {
fmt.Println(err)
os.Exit(1)
}
// Unmap gpio memory when done
defer rpio.Close()
// Set pin to output mode
pin1.Output()
pin2.Output()
pin3.Output()
pin4.Output()
// Toggle pin 20 times
for x := 0; x < 200; x++ {
in1()
time.Sleep(time.Second / 100)
in2()
time.Sleep(time.Second / 100)
in3()
time.Sleep(time.Second / 100)
in4()
time.Sleep(time.Second / 100)
}
}
方式3 抖动比较大 也很慢
package main
import (
"fmt"
"github.com/stianeikeland/go-rpio/v4"
"os"
"time"
)
var (
pin1 = rpio.Pin(26)
pin2 = rpio.Pin(19)
pin3 = rpio.Pin(13)
pin4 = rpio.Pin(6)
)
func part1(){
pin1.Write(1)
pin2.Write(0)
pin3.Write(0)
pin4.Write(0)
}
func part2(){
pin1.Write(1)
pin2.Write(1)
pin3.Write(0)
pin4.Write(0)
}
func part3(){
pin1.Write(0)
pin2.Write(1)
pin3.Write(0)
pin4.Write(0)
}
func part4(){
pin1.Write(0)
pin2.Write(1)
pin3.Write(1)
pin4.Write(0)
}
func part5(){
pin1.Write(0)
pin2.Write(0)
pin3.Write(1)
pin4.Write(0)
}
func part6(){
pin1.Write(0)
pin2.Write(0)
pin3.Write(1)
pin4.Write(1)
}
func part7(){
pin1.Write(0)
pin2.Write(0)
pin3.Write(0)
pin4.Write(1)
}
func part8(){
pin1.Write(1)
pin2.Write(0)
pin3.Write(0)
pin4.Write(1)
}
func main() {
// Open and map memory to access gpio, check for errors
if err := rpio.Open(); err != nil {
fmt.Println(err)
os.Exit(1)
}
// Unmap gpio memory when done
defer rpio.Close()
// Set pin to output mode
pin1.Output()
pin2.Output()
pin3.Output()
pin4.Output()
// Toggle pin 20 times
for x := 0; x < 200; x++ {
part1()
time.Sleep(time.Second / 100)
part2()
time.Sleep(time.Second / 100)
part3()
time.Sleep(time.Second / 100)
part4()
time.Sleep(time.Second / 100)
part5()
time.Sleep(time.Second / 100)
part6()
time.Sleep(time.Second / 100)
part7()
time.Sleep(time.Second / 100)
part8()
time.Sleep(time.Second / 100)
}
}
优化代码
package main
import (
"fmt"
"github.com/stianeikeland/go-rpio/v4"
"os"
"time"
)
var (
pin1 = rpio.Pin(26)
pin2 = rpio.Pin(19)
pin3 = rpio.Pin(13)
pin4 = rpio.Pin(6)
)
func setStep(a rpio.State,b rpio.State,c rpio.State,d rpio.State){
pin1.Write(a)
pin2.Write(b)
pin3.Write(c)
pin4.Write(d)
}
func main() {
// Open and map memory to access gpio, check for errors
if err := rpio.Open(); err != nil {
fmt.Println(err)
os.Exit(1)
}
// Unmap gpio memory when done
defer rpio.Close()
// Set pin to output mode
pin1.Output()
pin2.Output()
pin3.Output()
pin4.Output()
// Toggle pin 20 times
for x := 0; x < 200; x++ {
setStep(1,1,0,0)
time.Sleep(time.Second / 500)
setStep(0,1,1,0)
time.Sleep(time.Second / 500)
setStep(0,0,1,1)
time.Sleep(time.Second / 500)
setStep(1,0,0,1)
time.Sleep(time.Second / 500)
}
}