初级会员

- 积分
- 147
- 金钱
- 147
- 注册时间
- 2011-7-2
- 在线时间
- 3 小时
|

楼主 |
发表于 2011-7-2 23:04:22
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
在网上找到一个刚好是这种步进电机的控制程序:但里面的商品与STM32103说的不一样!是否通用?请高手解读一下程序并对应开发板的端口号对应上,谢谢!!
?  E0接IN1
?  E1接IN2
?  E2接IN3
?  E3接IN4
*STM32 控制步进电机 28BYJ-48
*已有 91 次阅读 2011-05-09 15:23
*选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下:
*四相八拍:A->AB->B ->BC ->C ->CD ->D ->DA
*其A、B、C、D指的是uln2003芯片驱动板的1N1、1N2、1N3、1N4,波形在上表示有输入信号。
*此外至少需要4根杜邦线,还需提供一个5V的直流电源,接线方式如下:
*PE0接IN1
*   E1接IN2
*  E2接IN3
*   E3接IN4
* 5V电源(一个是地,一个是正)。
/***************************************************************************//**
* @file: stm32_pio.h
* @brief: STM32F1xx CoX  IO  eripheral Interface
* @version: V1.0
* @date: 28 Feb. 2011
* @author: CooCox
*******************************************************************************/
#ifndef __STM_PIO_H
#define __STM_PIO_H
#include "cox_pio.h"
/***************************************************************************//**
* Define STM32F1xx CoX  IO Peripheral Interface
*******************************************************************************/
extern COX_PIO_PI pi_pio;
#endif
/***************************************************************************//**
* @file: stm32_pio.c
* @brief: STM32F1xx CoX PIO Peripheral Interface
* @version: V1.0
* @date: 28 Feb. 2011
* @author: CooCox
******************************************************************************/
#include "stm32_pio.h"
#include "stm32f10x.h"
/***************************************************************************//**
* @brief Get pointer to GPIO peripheral due to GPIO port
* @param[in] portNum: Port Number value, should be in range from 0 to 6.
* @return Pointer to GPIO peripheral
* @brief得到指向GPIO周边由于GPIO端口
*[]portNum * @param:港口数值,应在范围从0到6点。
* @return指向GPIO周边
*******************************************************************************/
static GPIO_TypeDef* STM32_GetGPIO(uint8_t port)
{
GPIO_TypeDef *pGPIO = COX_NULL;
switch(port)
{
case 0: pGPIO = GPIOA; break;
case 1: pGPIO = GPIOB; break;
case 2: pGPIO = GPIOC; break;
case 3: pGPIO = GPIOD; break;
case 4: pGPIO = GPIOE; break;
case 5: pGPIO = GPIOF; break;
case 6: pGPIO = GPIOG; break;
default: break;
}
return pGPIO;
}
/***************************************************************************//**
* @brief Initializes the PIO peripheral
* @param[in] pio: The specified peripheral
* @return Result, may be:
* -COX_ERROR: Error occurred, parameter is not supported
* -COX_SUCCESS: Previous argument of the specified option
* @brief初始化PIO周边
*@parampio:指定的周边
* @return结果,可能是:
* -COX_ERROR:错误发生、参数不支持
* -COX_SUCCESS:先前参数的指定选项
*******************************************************************************/
static COX_Status STM32_PIO_Init (COX_PIO_Dev pio)
{
GPIO_TypeDef* pGPIO = COX_NULL;
uint8_t port, pin;
port = (pio >> 8) & 0xFF;
pin = (pio >> 0) & 0xFF;
pGPIO = STM32_GetGPIO(port);
if(port >6 || port<0 || pin<0 || pin > 15)
return COX_ERROR;
/* Enable GPIO and AFIO clocks */
switch(port)
{
case 0: RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN); break;
case 1: RCC->APB2ENR |= (RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN); break;
case 2: RCC->APB2ENR |= (RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN); break;
case 3: RCC->APB2ENR |= (RCC_APB2ENR_IOPDEN | RCC_APB2ENR_AFIOEN); break;
case 4: RCC->APB2ENR |= (RCC_APB2ENR_IOPEEN | RCC_APB2ENR_AFIOEN); break;
default: break;
}
return COX_SUCCESS;
}
/***************************************************************************//**
* @brief Set direction (Input or Output)
* @param[in] pio: The specified PIO peripheral
* @param[in] dir: Direction, should be
* -0: Input
* -1: Output
* @return Result, may be:
* -COX_ERROR: Error occurred, parameter is not supported
* -COX_SUCCESS: Previous argument of the specified option
*******************************************************************************/
static COX_Status STM32_PIO_SetDir(COX_PIO_Dev pio, uint8_t dir)
{
GPIO_TypeDef* pGPIO = COX_NULL;
uint8_t port, pin;
port = (pio >> 8) & 0xFF;
pin = (pio >> 0) & 0xFF;
pGPIO = STM32_GetGPIO(port);
/* Direction is input:GPIO_Mode_IN_FLOATING */
if(dir == 0){
if(pin>7)
{
/* Configure the eight high port pins */
pin = pin-8;
/* MODE[1:0]=00 */
pGPIO -> CRH &= ~(0x3 << (pin*4));
/* CNF[1:0] =01 */
pGPIO -> CRH &= ~(0x8 << (pin*4));
pGPIO -> CRH |= (0x4 <<(pin*4));
}
else
{
/* Configure the eight low port pins */
pGPIO -> CRL &= ~(0x3 << (pin*4));
pGPIO -> CRL &= ~(0x8 << (pin*4));
pGPIO -> CRL |= (0x4 << (pin*4));
}
}
/* Direction is output:GPIO_Mode_Out_PP */
else {
if(pin>7)
{
pin = pin-8;
/* MODE[1:0]=11 */
pGPIO -> CRH |= (0x3 <<(pin*4));
/* CNF[1:0] =00 */
pGPIO -> CRH &= ~(0xc <<(pin*4));
}
else
{
pGPIO -> CRL |= (0x3 << (pin*4));
pGPIO -> CRL &= ~(0xc<<(pin*4));
}
}
return COX_SUCCESS;
}
/******************************<span s
> |
|