diff --git a/.vscode/settings.json b/.vscode/settings.json index fef69bb..64105ef 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,6 +14,12 @@ "spi.h": "c", "atomic": "cpp", "memory": "cpp", - "random": "cpp" + "random": "cpp", + "system_error": "cpp", + "array": "cpp", + "functional": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp" } } \ No newline at end of file diff --git a/app/Core/Src/gpio.c b/app/Core/Src/gpio.c index fa6af99..366cafa 100644 --- a/app/Core/Src/gpio.c +++ b/app/Core/Src/gpio.c @@ -65,6 +65,9 @@ void MX_GPIO_Init(void) HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET); + + /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ @@ -72,12 +75,12 @@ void MX_GPIO_Init(void) /*Configure GPIO pins : PE2 PE3 PE4 PE5 PE6 PE7 PE9 PE10 - PE11 PE12 PE13 PE14 - PE15 PE0 PE1 */ + PE13 PE14 PE15 PE0 + PE1 */ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5 |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_10 - |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 - |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1; + |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0 + |GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); @@ -132,8 +135,8 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure GPIO pin : PE8 */ - GPIO_InitStruct.Pin = GPIO_PIN_8; + /*Configure GPIO pins : PE8 PE11 PE12 */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; diff --git a/app/MDK-ARM/app.uvguix.h_zha b/app/MDK-ARM/app.uvguix.h_zha index 39541bf..b441606 100644 --- a/app/MDK-ARM/app.uvguix.h_zha +++ b/app/MDK-ARM/app.uvguix.h_zha @@ -15,17 +15,17 @@ 38003 Registers - 177 177 + 162 163 346 Code Coverage - 860 442 + 860 160 204 Performance Analyzer - 896 153 153 100 + 1020 @@ -70,7 +70,7 @@ 466 Source Browser 500 - 166 + 300 @@ -1822,7 +1822,7 @@ Build 966 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3660,9 +3660,9 @@ ..\..\dep\libtrinamic\src\ic\tmc4361A.cpp - 25 - 74 - 90 + 0 + 76 + 102 1 0 @@ -3679,7 +3679,7 @@ ..\..\src\port.cpp 4 - 12 + 21 47 1 diff --git a/app/app.ioc b/app/app.ioc index f6158c4..7d682a1 100644 --- a/app/app.ioc +++ b/app/app.ioc @@ -27,40 +27,42 @@ Mcu.Pin1=PH1-OSC_OUT Mcu.Pin10=PC4 Mcu.Pin11=PC5 Mcu.Pin12=PE8 -Mcu.Pin13=PD14 -Mcu.Pin14=PC6 -Mcu.Pin15=PC7 -Mcu.Pin16=PC8 -Mcu.Pin17=PC9 -Mcu.Pin18=PA9 -Mcu.Pin19=PA10 +Mcu.Pin13=PE11 +Mcu.Pin14=PE12 +Mcu.Pin15=PD14 +Mcu.Pin16=PC6 +Mcu.Pin17=PC7 +Mcu.Pin18=PC8 +Mcu.Pin19=PC9 Mcu.Pin2=PC0 -Mcu.Pin20=PA13 -Mcu.Pin21=PA14 -Mcu.Pin22=PD0 -Mcu.Pin23=PD1 -Mcu.Pin24=PD2 -Mcu.Pin25=PD3 -Mcu.Pin26=PD4 -Mcu.Pin27=PD5 -Mcu.Pin28=PD6 -Mcu.Pin29=PD7 +Mcu.Pin20=PA9 +Mcu.Pin21=PA10 +Mcu.Pin22=PA13 +Mcu.Pin23=PA14 +Mcu.Pin24=PD0 +Mcu.Pin25=PD1 +Mcu.Pin26=PD2 +Mcu.Pin27=PD3 +Mcu.Pin28=PD4 +Mcu.Pin29=PD5 Mcu.Pin3=PC1 -Mcu.Pin30=PB3 -Mcu.Pin31=PB6 -Mcu.Pin32=PB7 -Mcu.Pin33=VP_CRC_VS_CRC -Mcu.Pin34=VP_RNG_VS_RNG -Mcu.Pin35=VP_SYS_VS_Systick -Mcu.Pin36=VP_TIM6_VS_ClockSourceINT -Mcu.Pin37=VP_TIM7_VS_ClockSourceINT +Mcu.Pin30=PD6 +Mcu.Pin31=PD7 +Mcu.Pin32=PB3 +Mcu.Pin33=PB6 +Mcu.Pin34=PB7 +Mcu.Pin35=VP_CRC_VS_CRC +Mcu.Pin36=VP_RNG_VS_RNG +Mcu.Pin37=VP_SYS_VS_Systick +Mcu.Pin38=VP_TIM6_VS_ClockSourceINT +Mcu.Pin39=VP_TIM7_VS_ClockSourceINT Mcu.Pin4=PC2 Mcu.Pin5=PC3 Mcu.Pin6=PA4 Mcu.Pin7=PA5 Mcu.Pin8=PA6 Mcu.Pin9=PA7 -Mcu.PinsNb=38 +Mcu.PinsNb=40 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F407VETx @@ -150,6 +152,14 @@ PD6.Locked=true PD6.Signal=GPIO_Output PD7.Locked=true PD7.Signal=GPIO_Input +PE11.GPIOParameters=PinState +PE11.Locked=true +PE11.PinState=GPIO_PIN_SET +PE11.Signal=GPIO_Output +PE12.GPIOParameters=PinState +PE12.Locked=true +PE12.PinState=GPIO_PIN_SET +PE12.Signal=GPIO_Output PE8.Locked=true PE8.Signal=GPIO_Output PH0-OSC_IN.Mode=HSE-External-Oscillator @@ -184,7 +194,7 @@ ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=MDK-ARM V5.32 ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM4_Init-TIM4-false-HAL-true,7-MX_CRC_Init-CRC-false-HAL-true,8-MX_RNG_Init-RNG-false-HAL-true,9-MX_TIM7_Init-TIM7-false-HAL-true,10-MX_SPI1_Init-SPI1-false-HAL-true,11-MX_TIM6_Init-TIM6-false-HAL-true,12-MX_TIM8_Init-TIM8-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM4_Init-TIM4-false-HAL-true,7-MX_CRC_Init-CRC-false-HAL-true,8-MX_RNG_Init-RNG-false-HAL-true,9-MX_TIM7_Init-TIM7-false-HAL-true,10-MX_SPI1_Init-SPI1-false-HAL-true,11-MX_TIM6_Init-TIM6-false-HAL-true RCC.48MHZClocksFreq_Value=48000000 RCC.AHBFreq_Value=144000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 diff --git a/dep/libtrinamic b/dep/libtrinamic index 4801a88..1665bb7 160000 --- a/dep/libtrinamic +++ b/dep/libtrinamic @@ -1 +1 @@ -Subproject commit 4801a88cab96f1a7970398b3028afac98e39777f +Subproject commit 1665bb75e0e73e8fe76e2f5bbc81a5e10c2942d1 diff --git a/src/port.cpp b/src/port.cpp index 1385ffe..e815dd4 100644 --- a/src/port.cpp +++ b/src/port.cpp @@ -34,14 +34,28 @@ void port_delay_us(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); } void port_spi_cs_select(bool select) { // HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, select ? GPIO_PIN_SET : GPIO_PIN_RESET); } -void port_tmc4361_spi_write_and_read(uint8_t* data, size_t length) { +void port_tmc_motor_spi_write_and_read(int channel, uint8_t* data, size_t length) { // - port_spi_cs_select(false); - port_delay_us(1); - HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000); - port_spi_cs_select(true); + if (channel == MOTOR_1_TMC4361A_CHANNEL) { + port_spi_cs_select(false); + port_delay_us(1); + HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000); + port_spi_cs_select(true); + } } +void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state) { + if (channel == MOTOR_1_TMC4361A_CHANNEL) { + HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, state ? GPIO_PIN_SET : GPIO_PIN_RESET); + } +} +void port_tmc_ENN_pin_set_state(uint8_t channel, bool state) { + if (channel == MOTOR_1_TMC2160_CHANNEL) { + HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, state ? GPIO_PIN_SET : GPIO_PIN_RESET); + } +} +void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state) {} + void port_tmc_extern_clk_enable() { #if 1 /** @@ -53,11 +67,13 @@ void port_tmc_extern_clk_enable() { HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_4); #endif } +#if 0 int32_t port_tmc4361_get_version(uint8_t channel) { int value; uint8_t data[5]; data[0] = 0x7f; - port_tmc4361_spi_write_and_read(&data[0], 5); + port_tmc_motor_spi_write_and_read(&data[0], 5); value = ((uint32_t)data[1] << 24) | ((uint32_t)data[2] << 16) | (data[3] << 8) | data[4]; return value; } +#endif diff --git a/src/port.hpp b/src/port.hpp index 47a6add..eb4c2c2 100644 --- a/src/port.hpp +++ b/src/port.hpp @@ -7,6 +7,11 @@ void port_delay_us(uint32_t us); /******************************************************************************* * tmc芯片驱动相关 * *******************************************************************************/ -void port_tmc4361_spi_write_and_read(uint8_t *data, size_t length); +void port_tmc_motor_spi_write_and_read(int channel, uint8_t* data, size_t length); void port_tmc_extern_clk_enable(); -int32_t port_tmc4361_get_version(uint8_t channel) ; + +void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state); +void port_tmc_ENN_pin_set_state(uint8_t channel, bool state); +void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state); + +int32_t port_tmc4361_get_version(uint8_t channel); diff --git a/src/umain.cpp b/src/umain.cpp index 522efc7..320234c 100644 --- a/src/umain.cpp +++ b/src/umain.cpp @@ -9,19 +9,20 @@ #define TAG "main" +// +// port_tmc_DRV_ENN_pin_set_state + class TMC4361AImpl : public TMC4361A { - virtual void setResetPinState(bool state){}; - virtual void setFREEZEPinState(bool state){}; - virtual void setENNPinState(bool state){}; + protected: + virtual void setResetPinState(bool state) { port_tmc_nRESET_pin_set_state(m_channel, state); }; + virtual void setFREEZEPinState(bool state) { port_tmc_nFREEZE_pin_set_state(m_channel, state); }; + virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; virtual bool getTargetReachedPinState() { return false; }; virtual void sleepus(int32_t us) { port_delay_us(us); }; virtual void readWriteArray(uint8_t *data, size_t length) { // - if (m_channel == MOTOR_1_TMC4361A_CHANNEL) { - port_tmc4361_spi_write_and_read(data, length); - } + port_tmc_motor_spi_write_and_read(m_channel, data, length); }; }; - class TMC2160Impl : public TMC2160 { TMC4361A *m_tmc4361; @@ -31,8 +32,9 @@ class TMC2160Impl : public TMC2160 { TMC2160::initialize(channel); } - virtual void setENNPinState(bool state){}; - virtual void sleepus(int32_t us){}; + protected: + virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; + virtual void sleepus(int32_t us) { port_delay_us(us); }; virtual void readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); }; }; @@ -48,13 +50,23 @@ int umain(int argc, char const *argv[]) { tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160); tmc2160motor1.initialize(MOTOR_1_TMC2160_CHANNEL, &tmc4361motor1); - HAL_Delay(100); + tmc4361motor1.enableIC(true); + tmc2160motor1.enableIC(true); + + /** + * @brief 通过读取Version寄存器来判断芯片是否正常 + */ + int32_t ic4361Version = tmc4361motor1.readICVersion(); + int32_t ic2160Version = tmc2160motor1.readICVersion(); + // 期望 4361Version:2 ic2160Version:30 + ZLOGI(TAG, "4361Version:%x ic2160Version:%x", ic4361Version, ic2160Version); + + tmc4361motor1.setMaximumAcceleration(300000); + tmc4361motor1.setMaximumDeceleration(300000); + tmc4361motor1.rotate(100000); while (true) { - int32_t ic4361Version = tmc4361motor1.readICVersion(); - int32_t ic2160Version = tmc2160motor1.readICVersion(); - ZLOGI(TAG, "4361Version:%x ic2160Version:%x", ic4361Version, ic2160Version); port_do_debug_light_state(); } return 0;