feat: 增加步进电机绝对和相对位置设置函数
This commit is contained in:
@@ -7,8 +7,8 @@ Language: Cpp
|
|||||||
###################################
|
###################################
|
||||||
|
|
||||||
UseTab: Never
|
UseTab: Never
|
||||||
IndentWidth: 4
|
IndentWidth: 2
|
||||||
TabWidth: 4
|
TabWidth: 2
|
||||||
ColumnLimit: 0
|
ColumnLimit: 0
|
||||||
AccessModifierOffset: -4
|
AccessModifierOffset: -4
|
||||||
NamespaceIndentation: All
|
NamespaceIndentation: All
|
||||||
|
|||||||
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -7,7 +7,7 @@
|
|||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "openocd",
|
"name": "openocd",
|
||||||
"servertype": "openocd",
|
"servertype": "openocd",
|
||||||
"executable": "build\\BC3D\\BC3D.elf",
|
"executable": "build\\Debug\\BC3D.elf",
|
||||||
"runToEntryPoint": "main",
|
"runToEntryPoint": "main",
|
||||||
"configFiles": [
|
"configFiles": [
|
||||||
"interface/cmsis-dap.cfg",
|
"interface/cmsis-dap.cfg",
|
||||||
|
|||||||
20
BC3D.ATWP
20
BC3D.ATWP
@@ -36,17 +36,21 @@
|
|||||||
<ModeSub name="EXINT5" value="TRUE"/>
|
<ModeSub name="EXINT5" value="TRUE"/>
|
||||||
</Mode>
|
</Mode>
|
||||||
</EXINT>
|
</EXINT>
|
||||||
<TMR1>
|
|
||||||
<Mode>
|
|
||||||
<ModeSub name="Activated" value="TRUE"/>
|
|
||||||
</Mode>
|
|
||||||
</TMR1>
|
|
||||||
<TMR3>
|
<TMR3>
|
||||||
<Mode>
|
<Mode>
|
||||||
<ModeSub name="Multi-Channels" value="Encoder_Mode"/>
|
<ModeSub name="Multi-Channels" value="Encoder_Mode"/>
|
||||||
<ModeSub name="Activated" value="TRUE"/>
|
<ModeSub name="Activated" value="TRUE"/>
|
||||||
</Mode>
|
</Mode>
|
||||||
</TMR3>
|
</TMR3>
|
||||||
|
<TMR4>
|
||||||
|
<Mode>
|
||||||
|
<ModeSub name="Activated" value="TRUE"/>
|
||||||
|
</Mode>
|
||||||
|
<Parameters>
|
||||||
|
<ParametersSub name="DividerValue" value="199"/>
|
||||||
|
<ParametersSub name="Period" value="9999"/>
|
||||||
|
</Parameters>
|
||||||
|
</TMR4>
|
||||||
<TMR10>
|
<TMR10>
|
||||||
<Mode>
|
<Mode>
|
||||||
<ModeSub name="Channel1 mode" value="Output_without_pin"/>
|
<ModeSub name="Channel1 mode" value="Output_without_pin"/>
|
||||||
@@ -67,11 +71,9 @@
|
|||||||
<CAN1_RX1_IRQHandler>0;0;0</CAN1_RX1_IRQHandler>
|
<CAN1_RX1_IRQHandler>0;0;0</CAN1_RX1_IRQHandler>
|
||||||
<CAN1_SE_IRQHandler>0;0;0</CAN1_SE_IRQHandler>
|
<CAN1_SE_IRQHandler>0;0;0</CAN1_SE_IRQHandler>
|
||||||
<EXINT9_5_IRQHandler>0;0;0</EXINT9_5_IRQHandler>
|
<EXINT9_5_IRQHandler>0;0;0</EXINT9_5_IRQHandler>
|
||||||
<TMR1_BRK_TMR9_IRQHandler>0;0;0</TMR1_BRK_TMR9_IRQHandler>
|
|
||||||
<TMR1_OVF_TMR10_IRQHandler>0;0;0</TMR1_OVF_TMR10_IRQHandler>
|
<TMR1_OVF_TMR10_IRQHandler>0;0;0</TMR1_OVF_TMR10_IRQHandler>
|
||||||
<TMR1_TRG_HALL_TMR11_IRQHandler>0;0;0</TMR1_TRG_HALL_TMR11_IRQHandler>
|
|
||||||
<TMR1_CH_IRQHandler>0;0;0</TMR1_CH_IRQHandler>
|
|
||||||
<TMR3_GLOBAL_IRQHandler>0;0;0</TMR3_GLOBAL_IRQHandler>
|
<TMR3_GLOBAL_IRQHandler>0;0;0</TMR3_GLOBAL_IRQHandler>
|
||||||
|
<TMR4_GLOBAL_IRQHandler>1;0;0</TMR4_GLOBAL_IRQHandler>
|
||||||
<USART2_IRQHandler>0;0;0</USART2_IRQHandler>
|
<USART2_IRQHandler>0;0;0</USART2_IRQHandler>
|
||||||
</NVIC>
|
</NVIC>
|
||||||
<GPIO>
|
<GPIO>
|
||||||
@@ -134,7 +136,7 @@
|
|||||||
</PINInfo>
|
</PINInfo>
|
||||||
<ProjectInfomation>
|
<ProjectInfomation>
|
||||||
<ProjectName>BC3D</ProjectName>
|
<ProjectName>BC3D</ProjectName>
|
||||||
<ProjectLocation>C:/Users/ForgotDoge/Desktop/BC2024/firmware</ProjectLocation>
|
<ProjectLocation>C:/Users/evan/Desktop</ProjectLocation>
|
||||||
<ToolchainIDE>MDK_V5</ToolchainIDE>
|
<ToolchainIDE>MDK_V5</ToolchainIDE>
|
||||||
<KeepUserCode>true</KeepUserCode>
|
<KeepUserCode>true</KeepUserCode>
|
||||||
<MinHeapSize>0x200</MinHeapSize>
|
<MinHeapSize>0x200</MinHeapSize>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
"titleBar.activeBackground": "#3B3485",
|
"titleBar.activeBackground": "#3B3485",
|
||||||
"titleBar.activeForeground": "#FCFCFE"
|
"titleBar.activeForeground": "#FCFCFE"
|
||||||
},
|
},
|
||||||
"EIDE.OpenOCD.ExePath": "D:/Program Files (x86)/at32_OpenOCD_V2.0.2/bin/openocd.exe",
|
"EIDE.OpenOCD.ExePath": "C:/toolchains/openocd-arterytek/bin/openocd.exe",
|
||||||
"cortex-debug.variableUseNaturalFormat": true
|
"cortex-debug.variableUseNaturalFormat": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
141
app/by_stepper.c
141
app/by_stepper.c
@@ -1,41 +1,166 @@
|
|||||||
#include "by_stepper.h"
|
#include "by_stepper.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <dwt_delay.h>
|
#include <dwt_delay.h>
|
||||||
#include "by_debug.h"
|
#include "by_debug.h"
|
||||||
|
|
||||||
|
#define GEAR_INDEXING_DIAMETER (16.0f) // 齿轮分度圆直径
|
||||||
|
#define GEAR_MODULUS (2.0f) // 齿轮模数
|
||||||
|
#define ENCODER_PULSE_PER_CIRCLE (2048.0f) // 编码器每圈脉冲数
|
||||||
|
#define MILLIMETER_PER_CIRCLE (GEAR_INDEXING_DIAMETER * GEAR_MODULUS) // 齿轮每圈行走长度
|
||||||
|
#define ENCODER_PULSE_PER_MILLIMETER (ENCODER_PULSE_PER_CIRCLE / MILLIMETER_PER_CIRCLE) // 编码器每毫米脉冲数
|
||||||
|
#define STEPPER_STEP_ANGLE (1.8f) // 步进角度
|
||||||
|
#define DRIVER_PULSE_PER_STEP (16.0f) // 驱动器细分
|
||||||
|
#define DRIVER_PULSE_PER_CIRCLE (360.0f / STEPPER_STEP_ANGLE * DRIVER_PULSE_PER_STEP) // 驱动器每圈脉冲数
|
||||||
|
#define DRIVER_PULSE_PER_MILLIMETER (DRIVER_PULSE_PER_CIRCLE / MILLIMETER_PER_CIRCLE) // 驱动器每毫米脉冲数
|
||||||
|
|
||||||
|
#define ENCODER_ERROR_THRESHOLD (20)
|
||||||
|
|
||||||
|
int64_t position = 0;
|
||||||
|
int64_t position_aim = 0;
|
||||||
|
int64_t position_offset = 0;
|
||||||
|
|
||||||
|
uint8_t running_flag = 0;
|
||||||
|
|
||||||
// TODO 是否增加一个动作列表?一般都比较简单吧
|
// TODO 是否增加一个动作列表?一般都比较简单吧
|
||||||
|
|
||||||
struct by_stepper_t {
|
struct by_stepper_t {
|
||||||
uint8_t dir;
|
uint8_t dir;
|
||||||
stepper_speed_t speed;
|
stepper_speed_t speed;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct by_stepper_t by_stepper;
|
struct by_stepper_t by_stepper;
|
||||||
|
|
||||||
void by_stepper_init(void)
|
static int64_t abs_s64(int64_t x)
|
||||||
{
|
{
|
||||||
memset(&by_stepper, 0x00, sizeof(by_stepper));
|
return x > 0 ? x : -x;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by_stepper_set_dir(uint8_t dir)
|
void by_stepper_set_dir(uint8_t dir)
|
||||||
{
|
{
|
||||||
by_stepper.dir = dir;
|
by_stepper.dir = dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by_stepper_set_speed(stepper_speed_t speed)
|
void by_stepper_set_speed(stepper_speed_t speed)
|
||||||
{
|
{
|
||||||
by_stepper.speed = speed;
|
by_stepper.speed = speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by_stepper_run(void)
|
void by_stepper_run(void)
|
||||||
{
|
{
|
||||||
// 根据预设条件发送脉冲
|
// 根据预设条件发送脉冲
|
||||||
|
gpio_bits_write(GPIOA, GPIO_PINS_8, by_stepper.dir ? TRUE : FALSE); // DIR
|
||||||
|
gpio_bits_write(GPIOB, GPIO_PINS_15, !gpio_output_data_bit_read(GPIOB, GPIO_PINS_15)); // CLK
|
||||||
|
DWT_Delay(40U * (uint16_t)by_stepper.speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
void by_stepper_stop(uint8_t hold)
|
||||||
|
{
|
||||||
|
gpio_bits_write(GPIOA, GPIO_PINS_9, hold ? FALSE : TRUE); // EN
|
||||||
|
|
||||||
|
gpio_bits_write(GPIOA, GPIO_PINS_8, FALSE); // DIR
|
||||||
|
gpio_bits_write(GPIOB, GPIO_PINS_15, FALSE); // CLK
|
||||||
|
}
|
||||||
|
|
||||||
|
void by_stepper_set_position_millimeter(float distance)
|
||||||
|
{
|
||||||
|
if (!running_flag) {
|
||||||
|
position_aim = (int64_t)(distance * ENCODER_PULSE_PER_MILLIMETER);
|
||||||
|
position_offset = position_aim - position;
|
||||||
|
running_flag = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void by_stepper_add_position_millimeter(float distance)
|
||||||
|
{
|
||||||
|
if (!running_flag) {
|
||||||
|
position_aim = position + (int64_t)(distance * ENCODER_PULSE_PER_MILLIMETER);
|
||||||
|
position_offset = position_aim - position;
|
||||||
|
running_flag = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void by_stepper_init(void)
|
||||||
|
{
|
||||||
|
uint32_t slow_start_cnt = 30000;
|
||||||
|
LOGD("by_stepper init...");
|
||||||
|
|
||||||
|
memset(&by_stepper, 0x00, sizeof(by_stepper));
|
||||||
|
|
||||||
|
gpio_bits_write(GPIOB, GPIO_PINS_12, TRUE); // MODE2
|
||||||
|
gpio_bits_write(GPIOB, GPIO_PINS_13, FALSE); // MODE1
|
||||||
|
gpio_bits_write(GPIOB, GPIO_PINS_14, FALSE); // MODE0
|
||||||
|
gpio_bits_write(GPIOA, GPIO_PINS_9, FALSE); // EN
|
||||||
|
gpio_bits_write(GPIOA, GPIO_PINS_8, TRUE); // DIR
|
||||||
|
gpio_bits_write(GPIOB, GPIO_PINS_15, FALSE); // CLK
|
||||||
|
|
||||||
|
by_stepper_set_dir(0);
|
||||||
|
by_stepper_set_speed(STEPPER_SPEED_DIV2);
|
||||||
|
|
||||||
|
while (gpio_input_data_bit_read(GPIOB, GPIO_PINS_10) == SET && slow_start_cnt--) {
|
||||||
gpio_bits_write(GPIOA, GPIO_PINS_8, by_stepper.dir ? TRUE : FALSE); // DIR
|
gpio_bits_write(GPIOA, GPIO_PINS_8, by_stepper.dir ? TRUE : FALSE); // DIR
|
||||||
gpio_bits_write(GPIOB, GPIO_PINS_15, !gpio_output_data_bit_read(GPIOB, GPIO_PINS_15)); // CLK
|
gpio_bits_write(GPIOB, GPIO_PINS_15, !gpio_output_data_bit_read(GPIOB, GPIO_PINS_15)); // CLK
|
||||||
DWT_Delay(40U * (uint16_t)by_stepper.speed);
|
DWT_Delay(40U * (uint16_t)by_stepper.speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
by_stepper_set_speed(STEPPER_SPEED_DIV1);
|
||||||
|
|
||||||
|
while (gpio_input_data_bit_read(GPIOB, GPIO_PINS_10) == SET) {
|
||||||
|
gpio_bits_write(GPIOA, GPIO_PINS_8, by_stepper.dir ? TRUE : FALSE); // DIR
|
||||||
|
gpio_bits_write(GPIOB, GPIO_PINS_15, !gpio_output_data_bit_read(GPIOB, GPIO_PINS_15)); // CLK
|
||||||
|
DWT_Delay(40U * (uint16_t)by_stepper.speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
position = 0; // 位置归零
|
||||||
|
tmr_counter_value_set(TMR3, 0);
|
||||||
|
|
||||||
|
LOGD("by_stepper init ok");
|
||||||
}
|
}
|
||||||
|
|
||||||
void by_stepper_stop(void)
|
void by_stepper_loop(void)
|
||||||
{
|
{
|
||||||
|
int16_t temp = (int16_t)tmr_counter_value_get(TMR3);
|
||||||
|
position += (int64_t)temp;
|
||||||
|
tmr_counter_value_set(TMR3, 0);
|
||||||
|
|
||||||
|
if (running_flag) {
|
||||||
|
if (position_offset > 0) {
|
||||||
|
by_stepper_set_dir(0);
|
||||||
|
by_stepper_run();
|
||||||
|
} else if (position_offset < 0) {
|
||||||
|
by_stepper_set_dir(1);
|
||||||
|
by_stepper_run();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 当定位误差小于阈值时,停止运动。否则重新计算定位误差
|
||||||
|
if (abs_s64(position_aim - position) < ENCODER_ERROR_THRESHOLD) {
|
||||||
|
running_flag = 0;
|
||||||
|
position_offset = 0;
|
||||||
|
} else {
|
||||||
|
position_offset = position_aim - position;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
by_stepper_stop(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (position_offset) {
|
||||||
|
// if (position_offset > 0) {
|
||||||
|
// by_stepper_set_dir(0);
|
||||||
|
// by_stepper_run();
|
||||||
|
// position_offset -= 1;
|
||||||
|
// } else if (position_offset++ < 0) {
|
||||||
|
// by_stepper_set_dir(1);
|
||||||
|
// by_stepper_run();
|
||||||
|
// position_offset += 1;
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// by_stepper_stop(0);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
void by_stpepper_int(void)
|
||||||
|
{
|
||||||
|
// position += (int16_t)(tmr_counter_value_get(TMR3));
|
||||||
|
// tmr_counter_value_set(TMR3, 0);
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,29 @@
|
|||||||
|
#ifndef _BY_STEPPER_H__
|
||||||
|
#define _BY_STEPPER_H__
|
||||||
|
|
||||||
#include "at32f413.h"
|
#include "at32f413.h"
|
||||||
|
|
||||||
typedef enum stepper_speed_t {
|
typedef enum stepper_speed_t {
|
||||||
STEPPER_SPEED_DIV0 = 0,
|
STEPPER_SPEED_DIV1 = 1,
|
||||||
STEPPER_SPEED_DIV2 = 2,
|
STEPPER_SPEED_DIV2 = 2,
|
||||||
STEPPER_SPEED_DIV4 = 4,
|
STEPPER_SPEED_DIV4 = 4,
|
||||||
STEPPER_SPEED_DIV8 = 8,
|
STEPPER_SPEED_DIV8 = 8,
|
||||||
STEPPER_SPEED_DIV16 = 16,
|
STEPPER_SPEED_DIV16 = 16,
|
||||||
STEPPER_SPEED_DIV32 = 32
|
STEPPER_SPEED_DIV32 = 32
|
||||||
} stepper_speed_t;
|
} stepper_speed_t;
|
||||||
|
|
||||||
|
extern void by_stepper_set_dir(uint8_t dir);
|
||||||
|
extern void by_stepper_set_speed(stepper_speed_t speed);
|
||||||
|
extern void by_stepper_init(void);
|
||||||
|
extern void by_stepper_run(void);
|
||||||
|
extern void by_stepper_stop(uint8_t hold);
|
||||||
|
extern void by_stepper_set_position_millimeter(float distance);
|
||||||
|
extern void by_stepper_add_position_millimeter(float distance);
|
||||||
|
extern void by_stepper_loop(void);
|
||||||
|
extern void by_stpepper_int(void);
|
||||||
|
|
||||||
|
extern int64_t position;
|
||||||
|
extern int64_t position_aim;
|
||||||
|
extern int64_t position_offset;
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -65,6 +65,7 @@ void SVC_Handler(void);
|
|||||||
void DebugMon_Handler(void);
|
void DebugMon_Handler(void);
|
||||||
void PendSV_Handler(void);
|
void PendSV_Handler(void);
|
||||||
|
|
||||||
|
void TMR4_GLOBAL_IRQHandler(void);
|
||||||
/* add user code begin exported functions */
|
/* add user code begin exported functions */
|
||||||
|
|
||||||
/* add user code end exported functions */
|
/* add user code end exported functions */
|
||||||
|
|||||||
@@ -55,6 +55,65 @@ extern "C" {
|
|||||||
|
|
||||||
/* add user code end exported macro */
|
/* add user code end exported macro */
|
||||||
|
|
||||||
|
/* add user code begin dma define */
|
||||||
|
/* user can only modify the dma define value */
|
||||||
|
//#define DMA1_CHANNEL1_BUFFER_SIZE 0
|
||||||
|
//#define DMA1_CHANNEL1_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA1_CHANNEL1_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA1_CHANNEL2_BUFFER_SIZE 0
|
||||||
|
//#define DMA1_CHANNEL2_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA1_CHANNEL2_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA1_CHANNEL3_BUFFER_SIZE 0
|
||||||
|
//#define DMA1_CHANNEL3_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA1_CHANNEL3_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA1_CHANNEL4_BUFFER_SIZE 0
|
||||||
|
//#define DMA1_CHANNEL4_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA1_CHANNEL4_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA1_CHANNEL5_BUFFER_SIZE 0
|
||||||
|
//#define DMA1_CHANNEL5_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA1_CHANNEL5_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA1_CHANNEL6_BUFFER_SIZE 0
|
||||||
|
//#define DMA1_CHANNEL6_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA1_CHANNEL6_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA1_CHANNEL7_BUFFER_SIZE 0
|
||||||
|
//#define DMA1_CHANNEL7_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA1_CHANNEL7_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA2_CHANNEL1_BUFFER_SIZE 0
|
||||||
|
//#define DMA2_CHANNEL1_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA2_CHANNEL1_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA2_CHANNEL2_BUFFER_SIZE 0
|
||||||
|
//#define DMA2_CHANNEL2_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA2_CHANNEL2_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA2_CHANNEL3_BUFFER_SIZE 0
|
||||||
|
//#define DMA2_CHANNEL3_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA2_CHANNEL3_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA2_CHANNEL4_BUFFER_SIZE 0
|
||||||
|
//#define DMA2_CHANNEL4_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA2_CHANNEL4_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA2_CHANNEL5_BUFFER_SIZE 0
|
||||||
|
//#define DMA2_CHANNEL5_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA2_CHANNEL5_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA2_CHANNEL6_BUFFER_SIZE 0
|
||||||
|
//#define DMA2_CHANNEL6_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA2_CHANNEL6_PERIPHERAL_BASE_ADDR 0
|
||||||
|
|
||||||
|
//#define DMA2_CHANNEL7_BUFFER_SIZE 0
|
||||||
|
//#define DMA2_CHANNEL7_MEMORY_BASE_ADDR 0
|
||||||
|
//#define DMA2_CHANNEL7_PERIPHERAL_BASE_ADDR 0
|
||||||
|
/* add user code end dma define */
|
||||||
|
|
||||||
/* Private defines -------------------------------------------------------------*/
|
/* Private defines -------------------------------------------------------------*/
|
||||||
#define MODE2_PIN GPIO_PINS_12
|
#define MODE2_PIN GPIO_PINS_12
|
||||||
#define MODE2_GPIO_PORT GPIOB
|
#define MODE2_GPIO_PORT GPIOB
|
||||||
@@ -94,12 +153,12 @@ extern "C" {
|
|||||||
/* init usart2 function. */
|
/* init usart2 function. */
|
||||||
void wk_usart2_init(void);
|
void wk_usart2_init(void);
|
||||||
|
|
||||||
/* init tmr1 function. */
|
|
||||||
void wk_tmr1_init(void);
|
|
||||||
|
|
||||||
/* init tmr3 function. */
|
/* init tmr3 function. */
|
||||||
void wk_tmr3_init(void);
|
void wk_tmr3_init(void);
|
||||||
|
|
||||||
|
/* init tmr4 function. */
|
||||||
|
void wk_tmr4_init(void);
|
||||||
|
|
||||||
/* init tmr10 function. */
|
/* init tmr10 function. */
|
||||||
void wk_tmr10_init(void);
|
void wk_tmr10_init(void);
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
|
|
||||||
/* private includes ----------------------------------------------------------*/
|
/* private includes ----------------------------------------------------------*/
|
||||||
/* add user code begin private includes */
|
/* add user code begin private includes */
|
||||||
|
#include "by_debug.h"
|
||||||
|
#include "by_stepper.h"
|
||||||
/* add user code end private includes */
|
/* add user code end private includes */
|
||||||
|
|
||||||
/* private typedef -----------------------------------------------------------*/
|
/* private typedef -----------------------------------------------------------*/
|
||||||
@@ -204,6 +205,25 @@ void PendSV_Handler(void)
|
|||||||
/* add user code end PendSV_IRQ 1 */
|
/* add user code end PendSV_IRQ 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief this function handles TMR4 handler.
|
||||||
|
* @param none
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
void TMR4_GLOBAL_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* add user code begin TMR4_GLOBAL_IRQ 0 */
|
||||||
|
if(SET == tmr_interrupt_flag_get(TMR4, TMR_OVF_FLAG)){
|
||||||
|
by_stpepper_int();
|
||||||
|
tmr_flag_clear(TMR4, TMR_OVF_FLAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add user code end TMR4_GLOBAL_IRQ 0 */
|
||||||
|
/* add user code begin TMR4_GLOBAL_IRQ 1 */
|
||||||
|
|
||||||
|
/* add user code end TMR4_GLOBAL_IRQ 1 */
|
||||||
|
}
|
||||||
|
|
||||||
/* add user code begin 1 */
|
/* add user code begin 1 */
|
||||||
|
|
||||||
/* add user code end 1 */
|
/* add user code end 1 */
|
||||||
|
|||||||
@@ -165,15 +165,15 @@ void wk_periph_clock_config(void)
|
|||||||
/* enable gpiod periph clock */
|
/* enable gpiod periph clock */
|
||||||
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
|
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
|
||||||
|
|
||||||
/* enable tmr1 periph clock */
|
|
||||||
crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);
|
|
||||||
|
|
||||||
/* enable tmr10 periph clock */
|
/* enable tmr10 periph clock */
|
||||||
crm_periph_clock_enable(CRM_TMR10_PERIPH_CLOCK, TRUE);
|
crm_periph_clock_enable(CRM_TMR10_PERIPH_CLOCK, TRUE);
|
||||||
|
|
||||||
/* enable tmr3 periph clock */
|
/* enable tmr3 periph clock */
|
||||||
crm_periph_clock_enable(CRM_TMR3_PERIPH_CLOCK, TRUE);
|
crm_periph_clock_enable(CRM_TMR3_PERIPH_CLOCK, TRUE);
|
||||||
|
|
||||||
|
/* enable tmr4 periph clock */
|
||||||
|
crm_periph_clock_enable(CRM_TMR4_PERIPH_CLOCK, TRUE);
|
||||||
|
|
||||||
/* enable usart2 periph clock */
|
/* enable usart2 periph clock */
|
||||||
crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
|
crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
|
||||||
|
|
||||||
@@ -200,6 +200,8 @@ void wk_debug_config(void)
|
|||||||
void wk_nvic_config(void)
|
void wk_nvic_config(void)
|
||||||
{
|
{
|
||||||
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
|
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
|
||||||
|
|
||||||
|
nvic_irq_enable(TMR4_GLOBAL_IRQn, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -284,7 +286,7 @@ void wk_exint_config(void)
|
|||||||
exint_init(&exint_init_struct);
|
exint_init(&exint_init_struct);
|
||||||
|
|
||||||
/* add user code begin exint_config 2 */
|
/* add user code begin exint_config 2 */
|
||||||
|
exint_interrupt_enable(EXINT_LINE_5, TRUE);
|
||||||
/* add user code end exint_config 2 */
|
/* add user code end exint_config 2 */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,40 +339,6 @@ void wk_usart2_init(void)
|
|||||||
/* add user code end usart2_init 2 */
|
/* add user code end usart2_init 2 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief init tmr1 function.
|
|
||||||
* @param none
|
|
||||||
* @retval none
|
|
||||||
*/
|
|
||||||
void wk_tmr1_init(void)
|
|
||||||
{
|
|
||||||
/* add user code begin tmr1_init 0 */
|
|
||||||
|
|
||||||
/* add user code end tmr1_init 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/* add user code begin tmr1_init 1 */
|
|
||||||
|
|
||||||
/* add user code end tmr1_init 1 */
|
|
||||||
|
|
||||||
/* configure counter settings */
|
|
||||||
tmr_base_init(TMR1, 65535, 0);
|
|
||||||
tmr_cnt_dir_set(TMR1, TMR_COUNT_UP);
|
|
||||||
tmr_clock_source_div_set(TMR1, TMR_CLOCK_DIV1);
|
|
||||||
tmr_repetition_counter_set(TMR1, 0);
|
|
||||||
tmr_period_buffer_enable(TMR1, FALSE);
|
|
||||||
|
|
||||||
/* configure primary mode settings */
|
|
||||||
tmr_sub_sync_mode_set(TMR1, FALSE);
|
|
||||||
tmr_primary_mode_select(TMR1, TMR_PRIMARY_SEL_RESET);
|
|
||||||
|
|
||||||
tmr_counter_enable(TMR1, TRUE);
|
|
||||||
|
|
||||||
/* add user code begin tmr1_init 2 */
|
|
||||||
|
|
||||||
/* add user code end tmr1_init 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief init tmr3 function.
|
* @brief init tmr3 function.
|
||||||
* @param none
|
* @param none
|
||||||
@@ -439,6 +407,47 @@ void wk_tmr3_init(void)
|
|||||||
/* add user code end tmr3_init 2 */
|
/* add user code end tmr3_init 2 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief init tmr4 function.
|
||||||
|
* @param none
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
void wk_tmr4_init(void)
|
||||||
|
{
|
||||||
|
/* add user code begin tmr4_init 0 */
|
||||||
|
|
||||||
|
/* add user code end tmr4_init 0 */
|
||||||
|
|
||||||
|
|
||||||
|
/* add user code begin tmr4_init 1 */
|
||||||
|
|
||||||
|
/* add user code end tmr4_init 1 */
|
||||||
|
|
||||||
|
/* configure counter settings */
|
||||||
|
tmr_base_init(TMR4, 9999, 1999);
|
||||||
|
tmr_cnt_dir_set(TMR4, TMR_COUNT_UP);
|
||||||
|
tmr_clock_source_div_set(TMR4, TMR_CLOCK_DIV1);
|
||||||
|
tmr_period_buffer_enable(TMR4, FALSE);
|
||||||
|
|
||||||
|
/* configure primary mode settings */
|
||||||
|
tmr_sub_sync_mode_set(TMR4, FALSE);
|
||||||
|
tmr_primary_mode_select(TMR4, TMR_PRIMARY_SEL_RESET);
|
||||||
|
|
||||||
|
tmr_counter_enable(TMR4, TRUE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Users need to configure TMR4 interrupt functions according to the actual application.
|
||||||
|
* 1. Call the below function to enable the corresponding TMR4 interrupt.
|
||||||
|
* --tmr_interrupt_enable(...)
|
||||||
|
* 2. Add the user's interrupt handler code into the below function in the at32f413_int.c file.
|
||||||
|
* --void TMR4_GLOBAL_IRQHandler(void)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* add user code begin tmr4_init 2 */
|
||||||
|
tmr_interrupt_enable(TMR4, TMR_OVF_INT, TRUE);
|
||||||
|
/* add user code end tmr4_init 2 */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief init tmr10 function.
|
* @brief init tmr10 function.
|
||||||
* @param none
|
* @param none
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include "by_debug.h"
|
#include "by_debug.h"
|
||||||
#include "by_can.h"
|
#include "by_can.h"
|
||||||
|
#include "by_stepper.h"
|
||||||
/* add user code end private includes */
|
/* add user code end private includes */
|
||||||
|
|
||||||
/* private typedef -----------------------------------------------------------*/
|
/* private typedef -----------------------------------------------------------*/
|
||||||
@@ -66,15 +67,15 @@
|
|||||||
/* add user code end 0 */
|
/* add user code end 0 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief main function.
|
* @brief main function.
|
||||||
* @param none
|
* @param none
|
||||||
* @retval none
|
* @retval none
|
||||||
*/
|
*/
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
/* add user code begin 1 */
|
/* add user code begin 1 */
|
||||||
by_debug_init();
|
by_debug_init();
|
||||||
/* add user code end 1 */
|
/* add user code end 1 */
|
||||||
|
|
||||||
/* system clock config. */
|
/* system clock config. */
|
||||||
wk_system_clock_config();
|
wk_system_clock_config();
|
||||||
@@ -94,12 +95,12 @@ int main(void)
|
|||||||
/* init exint function. */
|
/* init exint function. */
|
||||||
wk_exint_config();
|
wk_exint_config();
|
||||||
|
|
||||||
/* init tmr1 function. */
|
|
||||||
wk_tmr1_init();
|
|
||||||
|
|
||||||
/* init tmr3 function. */
|
/* init tmr3 function. */
|
||||||
wk_tmr3_init();
|
wk_tmr3_init();
|
||||||
|
|
||||||
|
/* init tmr4 function. */
|
||||||
|
wk_tmr4_init();
|
||||||
|
|
||||||
/* init tmr10 function. */
|
/* init tmr10 function. */
|
||||||
wk_tmr10_init();
|
wk_tmr10_init();
|
||||||
|
|
||||||
@@ -110,22 +111,14 @@ int main(void)
|
|||||||
wk_gpio_config();
|
wk_gpio_config();
|
||||||
|
|
||||||
/* add user code begin 2 */
|
/* add user code begin 2 */
|
||||||
DWT_Init();
|
DWT_Init();
|
||||||
|
by_stepper_init();
|
||||||
|
|
||||||
LOGD("hello world");
|
/* add user code end 2 */
|
||||||
|
|
||||||
gpio_bits_write(GPIOB, GPIO_PINS_12, FALSE); // MODE2
|
while (1) {
|
||||||
gpio_bits_write(GPIOB, GPIO_PINS_13, TRUE); // MODE1
|
|
||||||
gpio_bits_write(GPIOB, GPIO_PINS_14, TRUE); // MODE0
|
|
||||||
gpio_bits_write(GPIOA, GPIO_PINS_9, FALSE); // EN
|
|
||||||
gpio_bits_write(GPIOA, GPIO_PINS_8, TRUE); // DIR
|
|
||||||
gpio_bits_write(GPIOB, GPIO_PINS_15, TRUE); // CLK
|
|
||||||
/* add user code end 2 */
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
/* add user code begin 3 */
|
/* add user code begin 3 */
|
||||||
DWT_Delay(40);
|
by_stepper_loop();
|
||||||
/* add user code end 3 */
|
/* add user code end 3 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user