写的很菜,用的STD库,但是稍微改一下就能用 /*这是步进电机驱动程序,本程序使用STM8S003F3系列单片机的 【GPIOC】外设 * 需要占用的GPIO管脚分别是:GPIOC 3~6 * 步进电机逆时针旋转,八拍方式驱动,线序为:A、AB、B、BC、C、CD、D、DA * 步进电机步脚距7.5/85度,减速比1/85 */ #include "moto_driver.h" unsigned int steps = 0;//定义变量:总部步数 void moto_timer_init(void)//使用定时器4, { CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4,ENABLE);//使能TIMER4外设时钟 TIM4_DeInit();//恢复TIME4寄存器默认值 TIM4_TimeBaseInit(TIM4_PRESCALER_128,80);//设置预分频数128,,计数器初值256,256/(16M/8/128)= 60.1hz TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//向上溢出中断,中断函数向量号为25 TIM4_SetCounter(0x00);// TIM4_ARRPreloadConfig(ENABLE); TIM4_Cmd(DISABLE); //TIM4_Cmd(ENABLE);//使能TIME4,参数ENABLE、DISABLE //enableInterrupts();//使能中断总开关 } void moto_pin_init(void)//电机驱动IO初始化,开漏输出C3\PC4\PC5\PC6 { GPIO_DeInit(GPIOC); GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW); GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_OUT_PP_HIGH_SLOW); GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_SLOW); GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_SLOW); } void steps_0(void)//步进0:1000 { GPIO_WriteHigh(GPIOC,GPIO_PIN_3); GPIO_WriteLow(GPIOC,GPIO_PIN_4); GPIO_WriteLow(GPIOC,GPIO_PIN_5); GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_1(void)//步进1:1100 { GPIO_WriteHigh(GPIOC,GPIO_PIN_3); GPIO_WriteHigh(GPIOC,GPIO_PIN_4); GPIO_WriteLow(GPIOC,GPIO_PIN_5); GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_2(void)//步进2:0100 { GPIO_WriteLow(GPIOC,GPIO_PIN_3); GPIO_WriteHigh(GPIOC,GPIO_PIN_4); GPIO_WriteLow(GPIOC,GPIO_PIN_5); GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_3(void)//步进3:0110 { GPIO_WriteLow(GPIOC,GPIO_PIN_3); GPIO_WriteHigh(GPIOC,GPIO_PIN_4); GPIO_WriteHigh(GPIOC,GPIO_PIN_5); GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_4(void)//步进4:0010 { GPIO_WriteLow(GPIOC,GPIO_PIN_3); GPIO_WriteLow(GPIOC,GPIO_PIN_4); GPIO_WriteHigh(GPIOC,GPIO_PIN_5); GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_5(void)//步进5:0011 { GPIO_WriteLow(GPIOC,GPIO_PIN_3); GPIO_WriteLow(GPIOC,GPIO_PIN_4); GPIO_WriteHigh(GPIOC,GPIO_PIN_5); GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void steps_6(void)//步进6:0001 { GPIO_WriteLow(GPIOC,GPIO_PIN_3); GPIO_WriteLow(GPIOC,GPIO_PIN_4); GPIO_WriteLow(GPIOC,GPIO_PIN_5); GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void steps_7(void)//步进7:1001 { GPIO_WriteHigh(GPIOC,GPIO_PIN_3); GPIO_WriteLow(GPIOC,GPIO_PIN_4); GPIO_WriteLow(GPIOC,GPIO_PIN_5); GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void moto_off(void)//刹车停止电机运转函数 { TIM4_Cmd(DISABLE);//关闭定时器 TIM4_SetCounter(0x00);//清零定时器计数值 GPIO_WriteHigh(GPIOC,GPIO_PIN_3);//刹车堵转 GPIO_WriteHigh(GPIOC,GPIO_PIN_4); GPIO_WriteHigh(GPIOC,GPIO_PIN_5); GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void moto_on(void)//启动电机运转函数 { TIM4_SetCounter(0x00);//清零定时器计数值 TIM4_Cmd(ENABLE);//开启定时器 } void moto_run(char steps_)//电机单步运转函数,传入总步数 { switch(steps_ % 8)//单步细分 { case 0:steps_0();break; case 1:steps_1();break; case 2:steps_2();break; case 3:steps_3();break; case 4:steps_4();break; case 5:steps_5();break; case 6:steps_6();break; case 7:steps_7();break; } } void moto_init(void) { steps = 0; moto_pin_init(); moto_timer_init(); } 复制代码
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16