STM32 操作L6480 级联问题
利用STM32F103RCT6的SPI2操作两个级联在一起的L6480,用硬件SPI没有反应。用IO模拟SPI操作,后面一个有反应。前面一个始终不行。有使用过的,麻烦帮忙一下。建议简单调试一下,参照官方手册,先尽量低速通讯,看看是否正确。
坛子里的大神路过也请提供一些指导:) 不知道你的具体使用环境,我还是告诉你去哪里找参考吧。
ST有一个3D打印机的EVK,叫STEVAL-3DP001V1,里面用的是6个L6470H级联,L6470和L6480的通讯协议和控制部分基本相同,你可以参考这个开源的代码。
源代码地址在http://www.st.com/content/st_com/en/products/embedded-software/evaluation-tool-software/stsw-3dp001.html#get-software
怪事,原来是放在github上的,怎么现在要注册才能下载了。。。工程很大,你自己去下载吧。
在UM2076里面说了,stm32_cube\Drivers\BSP\STM32F4xx-3dPrinter\stm32f4xx_3dprinter_misc.c是步进驱动相关的代码
这个驱动的文件我拷贝在这给你悄悄,不够信息就要你自己去下载完整工程啦。
/**
******************************************************************************
* @file stm32f4xx_3dPrinter_motor.c
* @authorIPC Rennes
* @version V1.0.0
* @date January 29, 2015
* @brief motor functions of 3D Printer BSP driver
*(based on L6474)
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "l6474.h"
#include "stm32f4xx_3dprinter_motor.h"
#include "motorcontrol.h"
/** @addtogroup BSP
* @{
*/
/** @defgroup STM32F4XX_3DPRINTER_MOTOR
* @{
*/
/* Private constants ---------------------------------------------------------*/
/** @defgroup STM32F4XX_3DPRINTER_MOTOR_Private_Constants
* @{
*/
/// Timer Prescaler
#define TIMER_PRESCALER (1024)
/// SPI Maximum Timeout values for flags waiting loops
#define SPIx_TIMEOUT_MAX ((uint32_t)0x1000)
/**
* @}
*/
/* Private variables ---------------------------------------------------------*/
/** @defgroup STM32F4XX_3DPRINTER_MOTOR_Board_Private_Variables
* @{
*/
/// SPI handler declaration
static SPI_HandleTypeDef SpiHandle;
/// Timer handler for PWMX
TIM_HandleTypeDef hTimPwmX;
/// Timer handler for PWMY
TIM_HandleTypeDef hTimPwmY;
/// Timer handler for PWMZ
TIM_HandleTypeDef hTimPwmZ;
/// Timer handler for PWME1
TIM_HandleTypeDef hTimPwmE1;
/// Timer handler for PWME2
TIM_HandleTypeDef hTimPwmE2;
/// Timer handler for PWME3
TIM_HandleTypeDef hTimPwmE3;
/**
* @}
*/
/** @defgroup STM32F4XX_3DPRINTER_MOTOR_Board_Private_Function_Prototypes
* @{
*/
void BSP_MotorControlBoard_Delay(uint32_t delay); //Delay of the requested number of milliseconds
void BSP_MotorControlBoard_DisableIrq(void); //Disable Irq
void BSP_MotorControlBoard_EnableIrq(void); //Enable Irq
void BSP_MotorControlBoard_GpioInit(uint8_t nbDevices); //Initialise GPIOs used for L6474s
void BSP_MotorControlBoard_PwmXSetFreq(uint16_t newFreq); //Set PWM_X frequency and start it
void BSP_MotorControlBoard_PwmYSetFreq(uint16_t newFreq); //Set PWM_Y frequency and start it
void BSP_MotorControlBoard_PwmZSetFreq(uint16_t newFreq); //Set PWM_Z frequency and start it
void BSP_MotorControlBoard_PwmE1SetFreq(uint16_t newFreq); //Set PWM_E1 frequency and start it
void BSP_MotorControlBoard_PwmE2SetFreq(uint16_t newFreq); //Set PWM_E2 frequency and start it
void BSP_MotorControlBoard_PwmE3SetFreq(uint16_t newFreq); //Set PWM_E3 frequency and start it
void BSP_MotorControlBoard_PwmE4SetFreq(uint16_t newFreq); //Set PWM_E4 frequency and start it
void BSP_MotorControlBoard_PwmInit(uint8_t deviceId); //Init the PWM of the specified device
void BSP_MotorControlBoard_PwmStop(uint8_t deviceId); //Stop the PWM of the specified device
void BSP_MotorControlBoard_ReleaseReset(void); //Reset the L6474 reset pin
void BSP_MotorControlBoard_Reset(void); //Set the L6474 reset pin
void BSP_MotorControlBoard_SetDirectionGpio(uint8_t deviceId, uint8_t gpioState); //Set direction GPIO
uint8_t BSP_MotorControlBoard_SpiInit(void); //Initialise the SPI used for L6474s
uint8_t BSP_MotorControlBoard_SpiWriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte, uint8_t nbDevices); //Write bytes to the L6474s via SPI
/**
* @}
*/
/** @defgroupSTM32F4XX_3DPRINTER_MOTOR_Board_Private_Functions
* @{
*/
/******************************************************//**
* @brief This function provides an accurate delay in milliseconds
* @param delaytime length in milliseconds
* @retval None
**********************************************************/
void BSP_MotorControlBoard_Delay(uint32_t delay)
{
HAL_Delay(delay);
}
/******************************************************//**
* @brief This function disable the interruptions
* @param None
* @retval None
**********************************************************/
void BSP_MotorControlBoard_DisableIrq(void)
{
__disable_irq();
}
/******************************************************//**
* @brief This function enable the interruptions
* @param None
* @retval None
**********************************************************/
void BSP_MotorControlBoard_EnableIrq(void)
{
__enable_irq();
}
/******************************************************//**
* @briefInitiliases the GPIOs used by the L6474s
* @param nbDevices number of L6474 devices
* @retval None
**********************************************************/
void BSP_MotorControlBoard_GpioInit(uint8_t nbDevices)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__GPIOA_CLK_ENABLE();
__GPIOB_CLK_ENABLE();
__GPIOC_CLK_ENABLE();
__GPIOD_CLK_ENABLE();
__GPIOE_CLK_ENABLE();
/* Configure L6474 - DIR pin for device 0 -------------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_DIR_X_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_DIR_X_PORT, &GPIO_InitStruct);
/* Configure L6474 - Flag pin -------------------------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_FLAG_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_FLAG_PORT, &GPIO_InitStruct);
/* Set Priority of External Line Interrupt used for the Flag interrupt*/
HAL_NVIC_SetPriority(BSP_MOTOR_CONTROL_BOARD_FLAG_IRQn, 7, 0);
/* Enable the External Line Interrupt used for the Flag interrupt*/
HAL_NVIC_EnableIRQ(BSP_MOTOR_CONTROL_BOARD_FLAG_IRQn);
/* Configure L6474 - CS pin ---------------------------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_CS_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_CS_PORT, &GPIO_InitStruct);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_CS_PORT, BSP_MOTOR_CONTROL_BOARD_CS_PIN, GPIO_PIN_SET);
/* Configure L6474 - STBY/RESET pin -------------------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_RESET_X_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_RESET_X_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_RESET_Y_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_RESET_Y_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_RESET_Z_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_RESET_Z_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_RESET_E1_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_RESET_E1_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_RESET_E2_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_RESET_E2_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_RESET_E3_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_RESET_E3_PORT, &GPIO_InitStruct);
BSP_MotorControlBoard_Reset();
if (nbDevices > 1)
{
/* Configure L6474 - DIR pin for device1 ----------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_DIR_Y_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_DIR_Y_PORT, &GPIO_InitStruct);
}
if (nbDevices > 2)
{
/* Configure L6474 - DIR pin for device2 ----------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_DIR_Z_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_DIR_Z_PORT, &GPIO_InitStruct);
}
if (nbDevices > 3)
{
/* Configure L6474 - DIR pin for device3 ----------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_DIR_E1_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_DIR_E1_PORT, &GPIO_InitStruct);
}
if (nbDevices > 4)
{
/* Configure L6474 - DIR pin for device4 ----------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_DIR_E2_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_DIR_E2_PORT, &GPIO_InitStruct);
}
if (nbDevices > 5)
{
/* Configure L6474 - DIR pin for device5 ----------------------------*/
GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_DIR_E3_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_DIR_E3_PORT, &GPIO_InitStruct);
}
}
/******************************************************//**
* @briefSets the frequency of PWM_X used by device 0
* @param newFreq in Hz
* @retval None
* @note The frequency is directly the current speed of the device
**********************************************************/
void BSP_MotorControlBoard_PwmXSetFreq(uint16_t newFreq)
{
uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
uint32_t period = (sysFreq/ (TIMER_PRESCALER * BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_X_FREQ_RESCALER * (uint32_t)newFreq)) - 1;
__HAL_TIM_SetAutoreload(&hTimPwmX, period);
__HAL_TIM_SetCompare(&hTimPwmX, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_X, period >> 1);
HAL_TIM_PWM_Start_IT(&hTimPwmX, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_X);
}
/******************************************************//**
* @briefSets the frequency of PWM_Y used by device 1
* @param newFreq in Hz
* @retval None
* @note The frequency is directly the current speed of the device
**********************************************************/
void BSP_MotorControlBoard_PwmYSetFreq(uint16_t newFreq)
{
uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
uint32_t period = (sysFreq/ (TIMER_PRESCALER * BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Y_FREQ_RESCALER* (uint32_t)newFreq)) - 1;
__HAL_TIM_SetAutoreload(&hTimPwmY, period);
__HAL_TIM_SetCompare(&hTimPwmY, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Y, period >> 1);
HAL_TIM_PWM_Start_IT(&hTimPwmY, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Y);
}
/******************************************************//**
* @briefSets the frequency of PWM_Z used by device 2
* @param newFreq in Hz
* @retval None
* @note The frequency is directly the current speed of the device
**********************************************************/
void BSP_MotorControlBoard_PwmZSetFreq(uint16_t newFreq)
{
uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
uint32_t period = (sysFreq/ (TIMER_PRESCALER * BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Z_FREQ_RESCALER * (uint32_t)newFreq)) - 1;
__HAL_TIM_SetAutoreload(&hTimPwmZ, period);
__HAL_TIM_SetCompare(&hTimPwmZ, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Z, period >> 1);
HAL_TIM_PWM_Start_IT(&hTimPwmZ, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Z);
}
/******************************************************//**
* @briefSets the frequency of PWM_E1 used by device 3
* @param newFreq in Hz
* @retval None
* @note The frequency is directly the current speed of the device
**********************************************************/
void BSP_MotorControlBoard_PwmE1SetFreq(uint16_t newFreq)
{
uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
uint32_t period = (sysFreq/ (TIMER_PRESCALER * BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E1_FREQ_RESCALER * (uint32_t)newFreq)) - 1;
__HAL_TIM_SetAutoreload(&hTimPwmE1, period);
__HAL_TIM_SetCompare(&hTimPwmE1, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E1, period >> 1);
HAL_TIM_PWM_Start_IT(&hTimPwmE1, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E1);
}
/******************************************************//**
* @briefSets the frequency of PWM_E2 used by device 4
* @param newFreq in Hz
* @retval None
* @note The frequency is directly the current speed of the device
**********************************************************/
void BSP_MotorControlBoard_PwmE2SetFreq(uint16_t newFreq)
{
uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
uint32_t period = (sysFreq/ (TIMER_PRESCALER * BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E2_FREQ_RESCALER * (uint32_t)newFreq)) - 1;
__HAL_TIM_SetAutoreload(&hTimPwmE2, period);
__HAL_TIM_SetCompare(&hTimPwmE2, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E2, period >> 1);
HAL_TIM_PWM_Start_IT(&hTimPwmE2, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E2);
}
/******************************************************//**
* @briefSets the frequency of PWM_E3 used by device 5
* @param newFreq in Hz
* @retval None
* @note The frequency is directly the current speed of the device
**********************************************************/
void BSP_MotorControlBoard_PwmE3SetFreq(uint16_t newFreq)
{
uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
uint32_t period = (sysFreq/ (TIMER_PRESCALER * BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E3_FREQ_RESCALER * (uint32_t)newFreq)) - 1;
__HAL_TIM_SetAutoreload(&hTimPwmE3, period);
__HAL_TIM_SetCompare(&hTimPwmE3, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E3, period >> 1);
HAL_TIM_PWM_Start_IT(&hTimPwmE3, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E3);
}
/******************************************************//**
* @briefInitialises the PWM uses by the specified device
* @param deviceId (from 0 to 2)
* @retval None
* @note Device 0 uses PWM1 based on timer 1
* Device 1 uses PWM 2 based on timer 2
* Device 2 uses PWM3 based timer 0
**********************************************************/
void BSP_MotorControlBoard_PwmInit(uint8_t deviceId)
{
TIM_OC_InitTypeDef sConfigOC;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_HandleTypeDef *pHTim;
uint32_tchannel;
switch (deviceId)
{
case 0:
default:
pHTim = &hTimPwmX;
pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_X;
channel = BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_X;
break;
case1:
pHTim = &hTimPwmY;
pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Y;
channel = BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Y;
break;
case 2:
pHTim = &hTimPwmZ;
pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Z;
channel = BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Z;
break;
case 3:
pHTim = &hTimPwmE1;
pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E1;
channel = BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E1;
break;
case 4:
pHTim = &hTimPwmE2;
pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E2;
channel = BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E2;
break;
case 5:
pHTim = &hTimPwmE3;
pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E3;
channel = BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E3;
break;
}
pHTim->Init.Prescaler = TIMER_PRESCALER -1;
pHTim->Init.CounterMode = TIM_COUNTERMODE_UP;
pHTim->Init.Period = 0;
pHTim->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(pHTim);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(pHTim, &sConfigOC, channel);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(pHTim, &sMasterConfig);
}
/******************************************************//**
* @briefStops the PWM uses by the specified device
* @param deviceId (from 0 to 2)
* @retval None
**********************************************************/
void BSP_MotorControlBoard_PwmStop(uint8_t deviceId)
{
switch (deviceId)
{
case 0:
HAL_TIM_PWM_Stop(&hTimPwmX,BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_X);
break;
case1:
HAL_TIM_PWM_Stop(&hTimPwmY,BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Y);
break;
case 2:
HAL_TIM_PWM_Stop(&hTimPwmZ,BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Z);
break;
case 3:
HAL_TIM_PWM_Stop(&hTimPwmE1,BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E1);
break;
case 4:
HAL_TIM_PWM_Stop(&hTimPwmE2,BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E2);
break;
case 5:
HAL_TIM_PWM_Stop(&hTimPwmE3,BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E3);
break;
default:
break;//ignore error
}
}
/******************************************************//**
* @briefReleases the L6474 reset (pin set to High) of all devices
* @paramNone
* @retval None
**********************************************************/
void BSP_MotorControlBoard_ReleaseReset(void)
{
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_X_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_X_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_Y_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_Y_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_Z_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_Z_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_E1_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_E1_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_E2_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_E2_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_E3_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_E3_PIN, GPIO_PIN_SET);
}
/******************************************************//**
* @briefResets the L6474 (reset pin set to low) of all devices
* @paramNone
* @retval None
**********************************************************/
void BSP_MotorControlBoard_Reset(void)
{
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_X_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_X_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_Y_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_Y_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_Z_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_Z_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_E1_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_E1_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_E2_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_E2_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_RESET_E3_PORT, BSP_MOTOR_CONTROL_BOARD_RESET_E3_PIN, GPIO_PIN_RESET);
}
/******************************************************//**
* @briefSet the GPIO used for the direction
* @param deviceId (from 0 to 6)
* @param gpioState state of the direction gpio (0 to reset, 1 to set)
* @retval None
**********************************************************/
void BSP_MotorControlBoard_SetDirectionGpio(uint8_t deviceId, uint8_t gpioState)
{
switch (deviceId)
{
case 5:
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_DIR_E3_PORT, BSP_MOTOR_CONTROL_BOARD_DIR_E3_PIN, (GPIO_PinState)gpioState);
break;
case 4:
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_DIR_E2_PORT, BSP_MOTOR_CONTROL_BOARD_DIR_E2_PIN, (GPIO_PinState)gpioState);
break;
case 3:
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_DIR_E1_PORT, BSP_MOTOR_CONTROL_BOARD_DIR_E1_PIN, (GPIO_PinState)gpioState);
break;
case 2:
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_DIR_Z_PORT, BSP_MOTOR_CONTROL_BOARD_DIR_Z_PIN, (GPIO_PinState)gpioState);
break;
case 1:
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_DIR_Y_PORT, BSP_MOTOR_CONTROL_BOARD_DIR_Y_PIN, (GPIO_PinState)gpioState);
break;
case 0:
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_DIR_X_PORT, BSP_MOTOR_CONTROL_BOARD_DIR_X_PIN, (GPIO_PinState)gpioState);
break;
default:
;
}
}
/******************************************************//**
* @briefInitialise the SPI used by L6474
* @param None
* @retval HAL_OK if SPI transaction is OK, HAL_KO else
**********************************************************/
uint8_t BSP_MotorControlBoard_SpiInit(void)
{
HAL_StatusTypeDef status;
/* Initialises the SPI--------------------------------------------------*/
SpiHandle.Instance = SPIx;
SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
SpiHandle.Init.CLKPhase = SPI_PHASE_2EDGE;
SpiHandle.Init.CLKPolarity = SPI_POLARITY_HIGH;
SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
SpiHandle.Init.CRCPolynomial = 7;
SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
SpiHandle.Init.NSS = SPI_NSS_SOFT;
SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED;
SpiHandle.Init.Mode = SPI_MODE_MASTER;
status = HAL_SPI_Init(&SpiHandle);
return (uint8_t) status;
}
/******************************************************//**
* @briefWrite and read SPI byte to the L6474
* @param pByteToTransmit pointer to the byte to transmit
* @param pReceivedByte pointer to the received byte
* @param nbDevices Number of device in the SPI chain
* @retval HAL_OK if SPI transaction is OK, HAL_KO else
**********************************************************/
uint8_t BSP_MotorControlBoard_SpiWriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte, uint8_t nbDevices)
{
HAL_StatusTypeDef status = HAL_ERROR;
uint32_t i;
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_CS_PORT, BSP_MOTOR_CONTROL_BOARD_CS_PIN, GPIO_PIN_RESET);
for (i = 0; i < nbDevices; i++)
{
status = HAL_SPI_TransmitReceive(&SpiHandle, pByteToTransmit, pReceivedByte, 1, SPIx_TIMEOUT_MAX);
if (status != HAL_OK)
{
break;
}
pByteToTransmit++;
pReceivedByte++;
}
HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_CS_PORT, BSP_MOTOR_CONTROL_BOARD_CS_PIN, GPIO_PIN_SET);
return (uint8_t) status;
}
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
/**
******************************************************************************
* @file stm32f4xx_3dPrinter_motor.h
* @authorIPC Rennes
* @version V1.0.0
* @date January 29, 2015
* @brief Header for motor functions of 3D Printer BSP driver
*(based on L6474)
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F4XX_3DPRINTER_MOTOR_H
#define __STM32F4XX_3DPRINTER_MOTOR_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
//#include "stm32f4xx_nucleo.h"
#include "stm32f4xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM32F4XX_3DPRINTER_MOTOR
* @{
*/
/* Exported Constants --------------------------------------------------------*/
/** @defgroup STM32F4XX_3DPRINTER_MOTOR_Exported_Constants
* @{
*/
/******************************************************************************/
/* USE_STM32F4XX_NUCLEO */
/******************************************************************************/
/** @defgroup Constants_For_STM32F4XX_3DPRINTER_MOTOR_MOTOR
* @{
*/
/// Interrupt line used for L6474 FLAG
#define BSP_MOTOR_CONTROL_BOARD_FLAG_IRQn (EXTI15_10_IRQn)
/// Timer used for PWM_X
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_X (TIM1)
/// Channel Timer used for PWM_X
#define BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_X (TIM_CHANNEL_4)
/// HAL Active Channel Timer used for PWM_X
#define BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM_X (HAL_TIM_ACTIVE_CHANNEL_4)
/// Timer Clock Enable for PWM1
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_X_CLCK_ENABLE() __TIM1_CLK_ENABLE()
/// Timer Clock Disable for PWM1
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_X_CLCK_DISABLE()__TIM1_CLK_DISABLE()
/// PWM_X global interrupt
#define BSP_MOTOR_CONTROL_BOARD_PWM_X_IRQn (TIM1_CC_IRQn)
/// PWM1 GPIO alternate function
#define BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM_X (GPIO_AF1_TIM1)
/// PWM1 frequency rescaler (1 for HW PWM, 2 for SW PWM)
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_X_FREQ_RESCALER (1)
/// Timer used for PWM_Y
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Y (TIM2)
/// Channel Timer used for PWM_Y
#define BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Y (TIM_CHANNEL_3)
/// HAL Active Channel Timer used for PWM_Y
#define BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM_Y (HAL_TIM_ACTIVE_CHANNEL_3)
/// Timer Clock Enable for PWM_Y
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Y_CLCK_ENABLE() __TIM2_CLK_ENABLE()
/// Timer Clock Disable for PWM_Y
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Y_CLCK_DISABLE()__TIM2_CLK_DISABLE()
/// PWM_Y global interrupt
#define BSP_MOTOR_CONTROL_BOARD_PWM_Y_IRQn (TIM2_IRQn)
/// PWM_Y GPIO alternate function
#define BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM_Y (GPIO_AF1_TIM2)
/// PWM_Y frequency rescaler (1 for HW PWM, 2 for SW PWM)
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Y_FREQ_RESCALER (1)
/// Timer used for PWM_Z
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Z (TIM3)
/// Channel Timer used for PWM_Z
#define BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_Z (TIM_CHANNEL_1)
/// HAL Active Channel Timer used for PWM_Z
#define BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM_Z (HAL_TIM_ACTIVE_CHANNEL_1)
/// Timer Clock Enable for PWM_Z
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Z_CLCK_ENABLE() __TIM3_CLK_ENABLE()
/// Timer Clock Disable for PWM_Z
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Z_CLCK_DISABLE() __TIM3_CLK_DISABLE()
/// PWM_Z global interrupt
#define BSP_MOTOR_CONTROL_BOARD_PWM_Z_IRQn (TIM3_IRQn)
/// PWM_Z GPIO alternate function
#define BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM_Z (GPIO_AF2_TIM3)
/// PWM_Z frequency rescaler (1 for HW PWM, 2 for SW PWM)
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_Z_FREQ_RESCALER (1)
/// Timer used for PWM_E1
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E1 (TIM4)
/// Channel Timer used for PWM_E1
#define BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E1 (TIM_CHANNEL_1)
/// HAL Active Channel Timer used for PWM_E1
#define BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM_E1 (HAL_TIM_ACTIVE_CHANNEL_1)
/// Timer Clock Enable for PWM_E1
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E1_CLCK_ENABLE()__TIM4_CLK_ENABLE()
/// Timer Clock Disable for PWM_E1
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E1_CLCK_DISABLE() __TIM4_CLK_DISABLE()
/// PWM_E1 global interrupt
#define BSP_MOTOR_CONTROL_BOARD_PWM_E1_IRQn (TIM4_IRQn)
/// PWM_E1 GPIO alternate function
#define BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM_E1 (GPIO_AF2_TIM4)
/// PWM_E1 frequency rescaler (1 for HW PWM, 2 for SW PWM)
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E1_FREQ_RESCALER (1)
/// Timer used for PWM_E2
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E2 (TIM9)
/// Channel Timer used for PWM_E2
#define BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E2 (TIM_CHANNEL_1)
/// HAL Active Channel Timer used for PWM_E2
#define BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM_E2 (HAL_TIM_ACTIVE_CHANNEL_1)
/// Timer Clock Enable for PWM_E2
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E2_CLCK_ENABLE()__TIM9_CLK_ENABLE()
/// Timer Clock Disable for PWM_E2
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E2_CLCK_DISABLE() __TIM9_CLK_DISABLE()
/// PWM_E2 global interrupt
#define BSP_MOTOR_CONTROL_BOARD_PWM_E2_IRQn (TIM1_BRK_TIM9_IRQn)
/// PWM_E2 GPIO alternate function
#define BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM_E2 (GPIO_AF3_TIM9)
/// PWM_E2 frequency rescaler (1 for HW PWM, 2 for SW PWM)
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E2_FREQ_RESCALER (1)
/// Timer used for PWM_E3
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E3 (TIM10)
/// Channel Timer used for PWM_E3
#define BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_PWM_E3 (TIM_CHANNEL_1)
/// HAL Active Channel Timer used for PWM_E3
#define BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM_E3 (HAL_TIM_ACTIVE_CHANNEL_1)
/// Timer Clock Enable for PWM_E3
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E3_CLCK_ENABLE()__TIM10_CLK_ENABLE()
/// Timer Clock Disable for PWM_E3
#define __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E3_CLCK_DISABLE() __TIM10_CLK_DISABLE()
/// PWM_E3 global interrupt
#define BSP_MOTOR_CONTROL_BOARD_PWM_E3_IRQn (TIM1_UP_TIM10_IRQn)
/// PWM_E3 GPIO alternate function
#define BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM_E3 (GPIO_AF3_TIM10)
/// PWM_E3 frequency rescaler (1 for HW PWM, 2 for SW PWM)
#define BSP_MOTOR_CONTROL_BOARD_TIMER_PWM_E3_FREQ_RESCALER (1)
/**
* @}
*/
/******************************************************************************/
/* Independent plateform definitions */
/******************************************************************************/
/** @defgroup Constants_For_Motor_GPIO_Mapping
* @{
*/
/// GPIO Pin used for the L6474 flag pin
#define BSP_MOTOR_CONTROL_BOARD_FLAG_PIN (GPIO_PIN_1)
/// GPIO port used for the L6474 flag pin
#define BSP_MOTOR_CONTROL_BOARD_FLAG_PORT (GPIOE)
/// GPIO Pin used for the L6474 step clock pin of device 0
#define BSP_MOTOR_CONTROL_BOARD_PWM_X_PIN(GPIO_PIN_14)
/// GPIO Port used for the L6474 step clock pin of device 0
#define BSP_MOTOR_CONTROL_BOARD_PWM_X_PORT(GPIOE)
/// GPIO Pin used for the L6474 step clock pin of device 1
#define BSP_MOTOR_CONTROL_BOARD_PWM_Y_PIN(GPIO_PIN_10)
/// GPIO port used for the L6474 step clock pin of device 1
#define BSP_MOTOR_CONTROL_BOARD_PWM_Y_PORT(GPIOB)
/// GPIO Pin used for the L6474 step clock pin of device 2
#define BSP_MOTOR_CONTROL_BOARD_PWM_Z_PIN(GPIO_PIN_6)
/// GPIO port used for the L6474 step clock pin of device 2
#define BSP_MOTOR_CONTROL_BOARD_PWM_Z_PORT(GPIOC)
/// GPIO Pin used for the L6474 step clock pin of device 3
#define BSP_MOTOR_CONTROL_BOARD_PWM_E1_PIN (GPIO_PIN_12)
/// GPIO port used for the L6474 step clock pin of device 3
#define BSP_MOTOR_CONTROL_BOARD_PWM_E1_PORT(GPIOD)
/// GPIO Pin used for the L6474 step clock pin of device 4
#define BSP_MOTOR_CONTROL_BOARD_PWM_E2_PIN (GPIO_PIN_5)
/// GPIO port used for the L6474 step clock pin of device 4
#define BSP_MOTOR_CONTROL_BOARD_PWM_E2_PORT(GPIOE)
/// GPIO Pin used for the L6474 step clock pin of device 5
#define BSP_MOTOR_CONTROL_BOARD_PWM_E3_PIN (GPIO_PIN_8)
/// GPIO port used for the L6474 step clock pin of device 5
#define BSP_MOTOR_CONTROL_BOARD_PWM_E3_PORT(GPIOB)
/// GPIO Pin used for the L6474 direction pin of device 0 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_X_PIN(GPIO_PIN_15)
/// GPIO port used for the L6474 direction pin of device 0 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_X_PORT(GPIOE)
/// GPIO Pin used for the L6474 direction pin of device 1 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_Y_PIN (GPIO_PIN_9)
/// GPIO port used for the L6474 direction pin of device 1 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_Y_PORT(GPIOE)
/// GPIO Pin used for the L6474 direction pin of device 2 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_Z_PIN (GPIO_PIN_0)
/// GPIO port used for the L6474 direction pin of device 2 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_Z_PORT(GPIOC)
/// GPIO Pin used for the L6474 direction pin of device 3 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_E1_PIN (GPIO_PIN_13)
/// GPIO port used for the L6474 direction pin of device 3 *
#define BSP_MOTOR_CONTROL_BOARD_DIR_E1_PORT(GPIOC)
/// GPIO Pin used for the L6474 direction pin of device 4
#define BSP_MOTOR_CONTROL_BOARD_DIR_E2_PIN (GPIO_PIN_6)
/// GPIO port used for the L6474 direction pin of device 4
#define BSP_MOTOR_CONTROL_BOARD_DIR_E2_PORT(GPIOE)
/// GPIO Pin used for the L6474 direction pin of device 5
#define BSP_MOTOR_CONTROL_BOARD_DIR_E3_PIN (GPIO_PIN_2)
/// GPIO port used for the L6474 direction pin of device 5
#define BSP_MOTOR_CONTROL_BOARD_DIR_E3_PORT(GPIOE)
/// GPIO Pin used for the L6474 reset pin (device 0) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_X_PIN(GPIO_PIN_13)
/// GPIO port used for the L6474 reset(device 0) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_X_PORT (GPIOE)
/// GPIO Pin used for the L6474 reset pin(device 1) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_Y_PIN(GPIO_PIN_10)
/// GPIO port used for the L6474 reset pin (device 1) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_Y_PORT (GPIOE)
/// GPIO Pin used for the L6474 reset pin (device 2) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_Z_PIN(GPIO_PIN_15)
/// GPIO port used for the L6474 reset pin (device 2) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_Z_PORT (GPIOC)
/// GPIO Pin used for the L6474 reset pin (device 3) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_E1_PIN(GPIO_PIN_14)
/// GPIO port used for the L6474 reset pin (device 3) *
#define BSP_MOTOR_CONTROL_BOARD_RESET_E1_PORT (GPIOC)
/// GPIO Pin used for the L6474 reset pin (device 4)
#define BSP_MOTOR_CONTROL_BOARD_RESET_E2_PIN(GPIO_PIN_4)
/// GPIO port used for the L6474 reset pin (device 4)
#define BSP_MOTOR_CONTROL_BOARD_RESET_E2_PORT (GPIOE)
/// GPIO Pin used for the L6474 reset pin (device 5)
#define BSP_MOTOR_CONTROL_BOARD_RESET_E3_PIN(GPIO_PIN_3)
/// GPIO port used for the L6474 reset pin (device 5)
#define BSP_MOTOR_CONTROL_BOARD_RESET_E3_PORT (GPIOE)
/// GPIO Pin used for the L6474 SPI chip select pin
#define BSP_MOTOR_CONTROL_BOARD_CS_PIN(GPIO_PIN_4)
/// GPIO port used for the L6474 SPI chip selectpin
#define BSP_MOTOR_CONTROL_BOARD_CS_PORT (GPIOA)
/* Definition for SPIx clock resources */
/// Used SPI
#define SPIx (SPI1)
/// SPI clock enable
#define SPIx_CLK_ENABLE() __SPI1_CLK_ENABLE()
/// SPI SCK enable
#define SPIx_SCK_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE()
/// SPI MISO enable
#define SPIx_MISO_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE()
/// SPI MOSI enable
#define SPIx_MOSI_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE()
/// SPI Force reset
#define SPIx_FORCE_RESET() __SPI1_FORCE_RESET()
/// SPI Release reset
#define SPIx_RELEASE_RESET() __SPI1_RELEASE_RESET()
/// SPI SCK pin
#define SPIx_SCK_PIN (GPIO_PIN_5)
/// SPI SCK port
#define SPIx_SCK_GPIO_PORT (GPIOA)
/// SPI MISO pin
#define SPIx_MISO_PIN (GPIO_PIN_6)
/// SPI MISO port
#define SPIx_MISO_GPIO_PORT (GPIOA)
/// SPI MOSI pin
#define SPIx_MOSI_PIN (GPIO_PIN_7)
/// SPI MOSI port
#define SPIx_MOSI_GPIO_PORT (GPIOA)
/// SPI_SCK alternate function
#define SPIx_SCK_AF (GPIO_AF5_SPI1)
/// SPI MISO AF
#define SPIx_MISO_AF (SPIx_SCK_AF)
/// SPI MOSI AF
#define SPIx_MOSI_AF (SPIx_SCK_AF)
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM32F4XX_3DPRINTER_MOTOR_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
页:
[1]