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;