Skip to content
Snippets Groups Projects
Commit 268c06d3 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Added the first version of the darwin stm32 firmware.

parents
No related branches found
No related tags found
No related merge requests found
Showing with 908 additions and 0 deletions
#ifndef _ACTION_H
#define _ACTION_H
#include "stm32f10x.h"
// basic motion interface
void action_init(void);
uint8_t action_set_page(uint8_t page_id);
void action_start_page(void);
void action_stop_page(void);
uint8_t action_is_running(void);
// motion manager interface
void action_process(void);
#endif
#ifndef _ADC_H
#define _ADC_H
#include "stm32f10x.h"
#define NUM_ADC_CHANNELS 16
// public functions
void adc_init(void);
uint16_t adc_get_channel(uint8_t channel);
uint16_t adc_get_averaged_channel(uint8_t channel);
#endif
#ifndef _DYN_SERVOS_H
#define _DYN_SERVOS_H
// servo models
#define SERVO_AX12 0x000C
#define SERVO_AX18 0x0012
#define SERVO_RX10 0x000A
#define SERVO_RX24F 0x0018
#define SERVO_RX28 0x001C
#define SERVO_RX64 0x0040
#define SERVO_EX106 0x006B
#define SERVO_MX28 0x001D
// Servo register map
typedef enum{
P_MODEL_NUMBER_L = 0,
P_MODEL_NUMBER_H = 1,
P_VERSION = 2,
P_ID = 3,
P_BAUD_RATE = 4,
P_RETURN_DELAY_TIME = 5,
P_CW_ANGLE_LIMIT_L = 6,
P_CW_ANGLE_LIMIT_H = 7,
P_CCW_ANGLE_LIMIT_L = 8,
P_CCW_ANGLE_LIMIT_H = 9,
P_SYSTEM_DATA2 = 10,
P_HIGH_LIMIT_TEMPERATURE = 11,
P_LOW_LIMIT_VOLTAGE = 12,
P_HIGH_LIMIT_VOLTAGE = 13,
P_MAX_TORQUE_L = 14,
P_MAX_TORQUE_H = 15,
P_RETURN_LEVEL = 16,
P_ALARM_LED = 17,
P_ALARM_SHUTDOWN = 18,
P_OPERATING_MODE = 19,
P_LOW_CALIBRATION_L = 20,
P_LOW_CALIBRATION_H = 21,
P_HIGH_CALIBRATION_L = 22,
P_HIGH_CALIBRATION_H = 23,
P_TORQUE_ENABLE = 24,
P_LED = 25,
P_CW_COMPLIANCE_MARGIN = 26,
P_CCW_COMPLIANCE_MARGIN = 27,
P_CW_COMPLIANCE_SLOPE = 28,
P_CCW_COMPLIANCE_SLOPE = 29,
P_D_GAIN = 26,
P_I_GAIN = 27,
P_P_GAIN = 28,
P_RESERVED = 29,
P_GOAL_POSITION_L = 30,
P_GOAL_POSITION_H = 31,
P_MOVING_SPEED_L = 32,
P_MOVING_SPEED_H = 33,
P_TORQUE_LIMIT_L = 34,
P_TORQUE_LIMIT_H = 35,
P_PRESENT_POSITION_L = 36,
P_PRESENT_POSITION_H = 37,
P_PRESENT_SPEED_L = 38,
P_PRESENT_SPEED_H = 39,
P_PRESENT_LOAD_L = 40,
P_PRESENT_LOAD_H = 41,
P_PRESENT_VOLTAGE = 42,
P_PRESENT_TEMPERATURE = 43,
P_REGISTERED_INSTRUCTION = 44,
P_PAUSE_TIME = 45,
P_MOVING = 46,
P_LOCK = 47,
P_PUNCH_L = 48,
P_PUNCH_H = 49,
P_RESERVED4 = 50,
P_RESERVED5 = 51,
P_POT_L = 52,
P_POT_H = 53,
P_PWM_OUT_L = 54,
P_PWM_OUT_H = 55,
P_P_ERROR_L = 56,
P_P_ERROR_H = 57,
P_I_ERROR_L = 58,
P_I_ERROR_H = 59,
P_D_ERROR_L = 60,
P_D_ERROR_H = 61,
P_P_ERROR_OUT_L = 62,
P_P_ERROR_OUT_H = 63,
P_I_ERROR_OUT_L = 64,
P_I_ERROR_OUT_H = 65,
P_D_ERROR_OUT_L = 66,
P_D_ERROR_OUT_H = 67}TDynServo;
#endif
#ifndef _DYNAMIXEL_H
#define _DYNAMIXEL_H
#include "stm32f10x.h"
#define MAX_DATA_LENGTH 255
// errors
#define DYN_SUCCESS 0
#define DYN_BAD_FORMAT -1
#define DYN_NO_DEVICE -2
#define DYN_TIMEOUT -3
// possible packet types
typedef enum{DYN_PING=0x01,
DYN_READ=0x02,
DYN_WRITE=0x03,
DYN_REG_WRITE=0x04,
DYN_ACTION=0x05,
DYN_RESET=0x06,
DYN_SYNC_WRITE=0x83} TDynInstruction;
// boradcast ID
#define DYN_BROADCAST_ID 0xFE
void dyn_copy_packet(uint8_t *source, uint8_t *destination);
uint8_t dyn_set_id(uint8_t *packet, uint8_t id);
void dyn_set_checksum(uint8_t *packet);
uint8_t dyn_get_id(uint8_t *packet);
uint8_t dyn_get_length(uint8_t *packet);
uint8_t dyn_check_checksum(uint8_t *packet);
// instruction packet
/*
typedef struct{
uint8_t header[2];
uint8_t id;
uint8_t length;
uint8_t instruction;
uint8_t data[MAX_DATA_LENGTH];
uint8_t checksum;
}TDynInst;
*/
void dyn_init_instruction_packet(uint8_t *packet);
void dyn_set_instruction(uint8_t *packet,TDynInstruction inst);
// read instruction functions
uint8_t dyn_set_read_address(uint8_t *packet,uint8_t address);
uint8_t dyn_set_read_length(uint8_t *packet,uint8_t length);
// write and write_reg instruction functions
uint8_t dyn_set_write_address(uint8_t *packet,uint8_t address);
uint8_t dyn_set_write_data(uint8_t *packet,uint8_t length, uint8_t *data);
// sync_write instruction functions
uint8_t dyn_set_sync_write_length(uint8_t *packet,uint8_t length);
uint8_t dyn_set_sync_write_data(uint8_t *packet,uint8_t id,uint8_t *data);
TDynInstruction dyn_get_instruction(uint8_t *packet);
// read instruction functions
uint8_t dyn_get_read_address(uint8_t *packet);
uint8_t dyn_get_read_length(uint8_t *packet);
// write and write_reg instruction functions
uint8_t dyn_get_write_address(uint8_t *packet);
uint8_t dyn_get_write_data(uint8_t *packet,uint8_t *data);
// sync_write instruction functions
uint8_t dyn_get_sync_write_address(uint8_t *packet);
uint8_t dyn_get_sync_write_data(uint8_t *packet,uint8_t id,uint8_t *data);
// status packet
typedef enum{DYN_NO_ERROR=0x00,
DYN_INST_ERROR=0x40,
DYN_OVERLOAD_ERROR=0x20,
DYN_CHECKSUM_ERROR=0x10,
DYN_RANGE_ERROR=0x08,
DYN_OVERTEMP_ERROR=0x04,
DYN_ANGLE_ERROR=0x02,
DYN_VOLTAGE_ERROR=0x01} TDynError;
/*
typedef struct{
uint8_t header[2];
uint8_t id;
uint8_t length;
uint8_t error;
uint8_t data[MAX_DATA_LENGTH];
uint8_t checksum;
}TDynStatus;
*/
void dyn_init_status_packet(uint8_t *packet);
void dyn_set_status_error(uint8_t *packet,TDynError error);
void dyn_set_status_data(uint8_t *packet, uint8_t length, uint8_t *data);
TDynError dyn_get_status_error(uint8_t *packet);
uint8_t dyn_get_status_data(uint8_t *packet,uint8_t *data);
#endif
#ifndef _DYNAMIXEL_MASTER_H
#define _DYNAMIXEL_MASTER_H
#include "dynamixel.h"
// interrupt handlers
void USART1_IRQHandler(void);
// dynamixel master functions
void dyn_master_init(void);
void dyn_master_flush(void);
void dyn_master_power_on(void);
void dyn_master_power_off(void);
uint8_t dyn_master_is_powered_on(void);
void dyn_master_set_timeout(uint16_t timeout_ms);
void dyn_master_scan(uint8_t *num,uint8_t *ids);
uint8_t dyn_master_ping(uint8_t id);
uint8_t dyn_master_read_byte(uint8_t id,uint8_t address,uint8_t *data);
uint8_t dyn_master_read_word(uint8_t id,uint8_t address,uint16_t *data);
uint8_t dyn_master_read_table(uint8_t id,uint8_t address,uint8_t length,uint8_t *data);
uint8_t dyn_master_write_byte(uint8_t id, uint8_t address, uint8_t data);
uint8_t dyn_master_write_word(uint8_t id, uint8_t address, uint16_t data);
uint8_t dyn_master_write_table(uint8_t id, uint8_t address, uint8_t length, uint8_t *data);
uint8_t dyn_master_reg_write(uint8_t id, uint8_t address, uint8_t length, uint8_t *data);
void dyn_master_action(void);
void dyn_master_sync_write(uint8_t num,uint8_t *ids,uint8_t address, uint8_t length, uint8_t *data);
uint8_t dyn_master_reset(uint8_t id);
// repeater functions
uint8_t dyn_master_resend_inst_packet(uint8_t *inst_packet, uint8_t *status_packet);
#endif
#ifndef _DYNAMIXEL_SLAVE_H
#define _DYNAXIXEL_SLAVE_H
#include "dynamixel.h"
// interrupt handlers
void USART3_IRQHandler(void);
// public functions
void dyn_slave_init(void);
uint8_t dyn_slave_pc_present(void);
void dyn_slave_set_address(uint8_t id);
uint8_t dyn_slave_get_address(void);
uint8_t dyn_slave_is_packet_ready(void);
void dyn_slave_get_inst_packet(uint8_t *packet);
void dyn_slave_send_status_packet(uint8_t error,uint8_t length, uint8_t *data);
void dyn_slave_resend_status_packet(uint8_t *packet);
#endif
#ifndef _EEPROM_H
#define _EEPROM_H
#include "stm32f10x.h"
#define EEPROM_DATA_SIZE 0x18
// EEPROM errors
#define EEPROM_SUCCESS 0
#define EEPROM_BAD_ADDRESS -1
// public functions
uint16_t eeprom_read_device_model(void);
uint8_t eeprom_read_firmware_version(void);
uint8_t eeprom_read_device_id(void);
uint8_t eeprom_read_baudrate(void);
uint8_t eeprom_read_return_delay(void);
uint8_t eeprom_read_return_level(void);
uint8_t eeprom_read_table(uint32_t start_offset, int16_t length,uint8_t *data);
uint8_t eeprom_write_table(uint32_t start_offset, int16_t length,uint8_t *data);
#endif
#ifndef _GPIO_H
#define _GPIO_H
#include "stm32f10x.h"
// interrupt handler
void TIM2_IRQHandler(void);
// configuration functions
void gpio_init(void);
// LED 2 functions
void set_led2(void);
void clear_led2(void);
void toggle_led2(void);
void blink_led2(uint16_t period_ms);
// LED 3 functions
void set_led3(void);
void clear_led3(void);
void toggle_led3(void);
void blink_led4(uint16_t period_ms);
// LED 4 functions
void set_led4(void);
void clear_led4(void);
void toggle_led4(void);
void blink_led4(uint16_t period_ms);
// RX LED functions
void set_rx_led(void);
void clear_rx_led(void);
void toggle_rx_led(void);
void blink_rx_led(uint16_t period_ms);
// TX LED functions
void set_tx_led(void);
void clear_tx_led(void);
void toggle_tx_led(void);
void blink_tx_led(uint16_t period_ms);
// RGB LED's
void set_eyes_color(uint8_t r,uint8_t g, uint8_t b);
void get_eyes_color(uint8_t *r,uint8_t *g, uint8_t *b);
void set_head_color(uint8_t r,uint8_t g, uint8_t b);
void get_head_color(uint8_t *r,uint8_t *g, uint8_t *b);
// pushbuttons
uint8_t is_mode_pushed(void);
void mode_attach_function(void (*sw_function)(void));
uint8_t is_start_pushed(void);
void start_attach_function(void (*sw_function)(void));
#endif
#ifndef _IMU_H
#define _IMU_H
#include "stm32f10x.h"
//public functions
void imu_init(void);
void imu_get_gyroscope(int16_t *x, int16_t *y, int16_t *z);
void imu_get_accelerometer(int16_t *x, int16_t *y, int16_t *z);
#endif
#ifndef _JOINT_MOTION_H
#define _JOINT_MOTION_H
#include "stm32f10x.h"
#define JOINT_MAX_NUM_SERVOS 30
// public functions
void joint_motion_init(void);
void joint_motion_load_angles(uint8_t first,uint8_t num_servos, int16_t *angles);
void joint_motion_load_speeds(uint8_t first,uint8_t num_servos, uint8_t *speeds);
void joint_motion_load_accels(uint8_t first,uint8_t num_servos, uint8_t *accels);
void joint_motion_start(void);
void joint_motion_stop(void);
void joint_motion_pause(void);
uint8_t joint_motion_is_running(void);
// motion manager interface
void joint_motion_process(void);
#endif
#ifndef _MATRIX_H_
#define _MATRIX_H_
#include "stm32f10x.h"
#include "vector.h"
#include "point.h"
enum{
m00=0,
m01,
m02,
m03,
m10,
m11,
m12,
m13,
m20,
m21,
m22,
m23,
m30,
m31,
m32,
m33,
};
typedef struct{
float coef[16];
}TMatrix3D;
// public functions
void matrix3d_init(TMatrix3D *matrix);
void matrix3d_copy(TMatrix3D *matrix_dst, TMatrix3D *matrix_src);
void matrix3d_identity(TMatrix3D *matrix);
uint8_t matrix3d_inverse(TMatrix3D *org, TMatrix3D *inv);
void matrix3d_set_transform(TMatrix3D *matrix, TPoint3D *point, TVector3D *vector);
void matrix3d_mult(TMatrix3D *dst,TMatrix3D *a,TMatrix3D *b);
#endif
#ifndef _MOTION_MANAGER_H
#define _MOTION_MANAGER_H
#include "stm32f10x.h"
// default joint identifiers
enum{
R_SHOULDER_PITCH = 1,
L_SHOULDER_PITCH = 2,
R_SHOULDER_ROLL = 3,
L_SHOULDER_ROLL = 4,
R_ELBOW = 5,
L_ELBOW = 6,
R_HIP_YAW = 7,
L_HIP_YAW = 8,
R_HIP_ROLL = 9,
L_HIP_ROLL = 10,
R_HIP_PITCH = 11,
L_HIP_PITCH = 12,
R_KNEE = 13,
L_KNEE = 14,
R_ANKLE_PITCH = 15,
L_ANKLE_PITCH = 16,
R_ANKLE_ROLL = 17,
L_ANKLE_ROLL = 18,
HEAD_PAN = 19,
HEAD_TILT = 20
};
// motion modules
typedef enum{MM_NONE = 0,
MM_ACTION = 1,
MM_WALKING = 2,
MM_JOINTS = 3}TModules;
#define MAX_NUM_SERVOS 254
// servo information structure
typedef struct{
uint8_t id;
uint8_t model;
uint16_t max_value;
uint16_t min_value;
uint16_t center_value;
uint16_t current_value;
int16_t max_angle;
int16_t min_angle;
int16_t current_angle;
uint8_t module;
}TServoInfo;
extern const int8_t dir[14];
// interrupt handler
void TIM3_IRQHandler(void);
// public functions
void manager_init(void);
void manager_enable(void);
void manager_disable(void);
uint8_t manager_is_enabled(void);
inline uint8_t manager_get_num_servos(void);
inline uint8_t manager_get_period(void);
void manager_read_current_position(void);
void manager_set_servo_angle(uint8_t servo_id, int16_t angle);
void manager_set_servo_value(uint8_t servo_id, uint16_t value);
void manager_set_module(uint8_t servo_id,TModules module);
void manager_set_index_angle(uint8_t servo_id, int16_t angle);
void manager_set_index_value(uint8_t servo_id, uint16_t value);
inline int16_t manager_get_servo_angle(uint8_t servo_id);
inline uint16_t manager_get_servo_value(uint8_t servo_id);
inline TModules manager_get_servo_module(uint8_t servo_id);
inline int16_t manager_get_index_angle(uint8_t servo_id);
inline uint16_t manager_get_index_value(uint8_t servo_id);
inline TModules manager_get_index_module(uint8_t servo_id);
#endif
#ifndef _MOTION_PAGES_H
#define _MOTION_PAGES_H
#include "stm32f10x.h"
#define PAGE_SUCCESS 0
#define PAGE_BAD_CHECKSUM -1
#define PAGE_INVALID -2
#define PAGE_INVALID_POSE -3
#define PAGE_MAX_NUM_SERVOS 31
#define POSE_NUMBER_OF_POSES_PER_PAGE 7
typedef struct // Header Structure (total 64unsigned char)
{
uint8_t name[13]; // Name 0~13
uint8_t reserved1; // Reserved1 14
uint8_t repeat; // Repeat count 15
uint8_t schedule; // schedule 16
uint8_t reserved2[3]; // reserved2 17~19
uint8_t stepnum; // Number of step 20
uint8_t reserved3; // reserved3 21
uint8_t speed; // Speed 22
uint8_t reserved4; // reserved4 23
uint8_t accel; // Acceleration time 24
uint8_t next; // Link to next 25
uint8_t exit; // Link to exit 26
uint8_t reserved5[4]; // reserved5 27~30
uint8_t checksum; // checksum 31
uint8_t slope[PAGE_MAX_NUM_SERVOS]; // CW/CCW compliance slope 32~62
uint8_t reserved6; // reserved6 63
} TPageHeader;
typedef struct // Step Structure (total 64unsigned char)
{
uint16_t position[PAGE_MAX_NUM_SERVOS]; // Joint position 0~61
uint8_t pause; // Pause time 62
uint8_t time; // Time 63
} TStep;
typedef struct // Page Structure (total 512unsigned char)
{
TPageHeader header; // Page header 0~64
TStep steps[POSE_NUMBER_OF_POSES_PER_PAGE]; // Page step 65~511
} TPage;
uint8_t load_page_info(uint8_t page_id,TPage *page);
uint8_t get_offsets(uint16_t *offsets);
#endif
#ifndef _POINT_H_
#define _POINT_H_
typedef struct{
float x;
float y;
float z;
}TPoint3D;
// public functions
void point3d_init(TPoint3D *point);
void point3d_load(TPoint3D *point, float x, float y, float z);
void point3d_copy(TPoint3D *point_dst, TPoint3D *point_src);
#endif
#ifndef _RAM_H
#define _RAM_H
#include "stm32f10x.h"
#define RAM_SIZE 256
#define RAM_SUCCESS 0
#define RAM_BAD_ADDRESS -1
#define RAM_WRITE_ERROR -2
#define RAM_BAD_BIT -3
// CM730 register map
typedef enum {
/* EEPROM AREA */
CM730_MODEL_NUMBER_L = 0,
CM730_MODEL_NUMBER_H = 1,
CM730_VERSION = 2,
CM730_ID = 3,
CM730_BAUD_RATE = 4,
CM730_RETURN_DELAY_TIME = 5,
CM730_RETURN_LEVEL = 16,
/* RAM AREA */
CM730_DXL_POWER = 24,
CM730_LED_PANNEL = 25,
CM730_LED_HEAD_L = 26,
CM730_LED_HEAD_H = 27,
CM730_LED_EYE_L = 28,
CM730_LED_EYE_H = 29,
CM730_BUTTON = 30,
/* Action control registers*/
CM730_ACTION_NUMBER = 31,
CM730_ACTION_CONTROL = 32,
CM730_ACTION_STATUS = 33,
/* Walking control interface */
CM730_WALKING_CONTROL = 34,
CM730_WALKING_STATUS = 35,
/* joint motion control interface */
CM730_JOINT_CONTROL = 36,
CM730_JOINT_STATUS = 37,
/* Inertial sensors */
CM730_GYRO_Z_L = 38,
CM730_GYRO_Z_H = 39,
CM730_GYRO_Y_L = 40,
CM730_GYRO_Y_H = 41,
CM730_GYRO_X_L = 42,
CM730_GYRO_X_H = 43,
CM730_ACCEL_X_L = 44,
CM730_ACCEL_X_H = 45,
CM730_ACCEL_Y_L = 46,
CM730_ACCEL_Y_H = 47,
CM730_ACCEL_Z_L = 48,
CM730_ACCEL_Z_H = 49,
/* Analof to digital interface */
CM730_VOLTAGE = 50,
CM730_LEFT_MIC_L = 51,
CM730_LEFT_MIC_H = 52,
CM730_ADC2_L = 53,
CM730_ADC2_H = 54,
CM730_ADC3_L = 55,
CM730_ADC3_H = 56,
CM730_ADC4_L = 57,
CM730_ADC4_H = 58,
CM730_ADC5_L = 59,
CM730_ADC5_H = 60,
CM730_ADC6_L = 61,
CM730_ADC6_H = 62,
CM730_ADC7_L = 63,
CM730_ADC7_H = 64,
CM730_ADC8_L = 65,
CM730_ADC8_H = 66,
CM730_RIGHT_MIC_L = 67,
CM730_RIGHT_MIC_H = 68,
CM730_ADC10_L = 69,
CM730_ADC10_H = 70,
CM730_ADC11_L = 71,
CM730_ADC11_H = 72,
CM730_ADC12_L = 73,
CM730_ADC12_H = 74,
CM730_ADC13_L = 75,
CM730_ADC13_H = 76,
CM730_ADC14_L = 77,
CM730_ADC14_H = 78,
CM730_ADC15_L = 79,
CM730_ADC15_H = 80,
CM730_BUZZER_DATA0 = 81,
CM730_BUZZER_DATA1 = 82,
CM730_TX_REMOCON_DATA_L = 83,
CM730_TX_REMOCON_DATA_H = 84,
CM730_RX_REMOCON_DATA_L = 85,
CM730_RX_REMOCON_DATA_H = 86,
CM730_RX_REMOCON_DATA_ARRIVED = 87,
CM730_ZIGBEE_ID_L = 88,
CM730_ZIGBEE_ID_H = 89,
/* Walking data interface */
CM730_X_OFFSET = 90,
CM730_Y_OFFSET = 91,
CM730_Z_OFFSET = 92,
CM730_ROLL = 93,
CM730_PITCH = 94,
CM730_YAW = 95,
CM730_HIP_PITCH_OFF_L = 96,
CM730_HIP_PITCH_OFF_H = 97,
CM730_PERIOD_TIME_L = 98,
CM730_PERIOD_TIME_H = 99,
CM730_DSP_RATIO = 100,
CM730_STEP_FW_BW_RATIO = 101,
CM730_STEP_FW_BW = 102,
CM730_STEP_LEFT_RIGHT = 103,
CM730_STEP_DIRECTION = 104,
CM730_FOOT_HEIGHT = 105,
CM730_SWING_RIGHT_LEFT = 106,
CM730_SWING_TOP_DOWN = 107,
CM730_PELVIS_OFFSET = 108,
CM730_ARM_SWING_GAIN = 109,
CM730_BAL_KNEE_GAIN = 110,
CM730_BAL_ANKLE_PITCH_GAIN = 111,
CM730_BAL_HIP_ROLL_GAIN = 112,
CM730_BAL_ANKLE_ROLL_GAIN = 113,
CM730_P_GAIN = 114,
CM730_D_GAIN = 115,
CM730_I_GAIN = 116,
/* joint motion data interface */
CM730_SERVO_1_POS_L = 117,
CM730_SERVO_1_POS_H = 118,
CM730_SERVO_2_POS_L = 119,
CM730_SERVO_2_POS_H = 120,
CM730_SERVO_3_POS_L = 121,
CM730_SERVO_3_POS_H = 122,
CM730_SERVO_4_POS_L = 123,
CM730_SERVO_4_POS_H = 124,
CM730_SERVO_5_POS_L = 125,
CM730_SERVO_5_POS_H = 126,
CM730_SERVO_6_POS_L = 127,
CM730_SERVO_6_POS_H = 128,
CM730_SERVO_7_POS_L = 129,
CM730_SERVO_7_POS_H = 130,
CM730_SERVO_8_POS_L = 131,
CM730_SERVO_8_POS_H = 132,
CM730_SERVO_9_POS_L = 133,
CM730_SERVO_9_POS_H = 134,
CM730_SERVO_10_POS_L = 135,
CM730_SERVO_10_POS_H = 136,
CM730_SERVO_11_POS_L = 137,
CM730_SERVO_11_POS_H = 138,
CM730_SERVO_12_POS_L = 139,
CM730_SERVO_12_POS_H = 140,
CM730_SERVO_13_POS_L = 141,
CM730_SERVO_13_POS_H = 142,
CM730_SERVO_14_POS_L = 143,
CM730_SERVO_14_POS_H = 144,
CM730_SERVO_15_POS_L = 145,
CM730_SERVO_15_POS_H = 146,
CM730_SERVO_16_POS_L = 147,
CM730_SERVO_16_POS_H = 148,
CM730_SERVO_17_POS_L = 149,
CM730_SERVO_17_POS_H = 150,
CM730_SERVO_18_POS_L = 151,
CM730_SERVO_18_POS_H = 152,
CM730_SERVO_19_POS_L = 153,
CM730_SERVO_19_POS_H = 154,
CM730_SERVO_20_POS_L = 155,
CM730_SERVO_20_POS_H = 156,
CM730_SERVO_21_POS_L = 157,
CM730_SERVO_21_POS_H = 158,
CM730_SERVO_22_POS_L = 159,
CM730_SERVO_22_POS_H = 160,
CM730_SERVO_23_POS_L = 161,
CM730_SERVO_23_POS_H = 162,
CM730_SERVO_24_POS_L = 163,
CM730_SERVO_24_POS_H = 164,
CM730_SERVO_25_POS_L = 165,
CM730_SERVO_25_POS_H = 166,
CM730_SERVO_26_POS_L = 167,
CM730_SERVO_26_POS_H = 168,
CM730_SERVO_27_POS_L = 169,
CM730_SERVO_27_POS_H = 170,
CM730_SERVO_28_POS_L = 171,
CM730_SERVO_28_POS_H = 172,
CM730_SERVO_29_POS_L = 173,
CM730_SERVO_29_POS_H = 174,
CM730_SERVO_30_POS_L = 175,
CM730_SERVO_30_POS_H = 176,
CM730_SERVO_1_SPEED = 177,
CM730_SERVO_2_SPEED = 178,
CM730_SERVO_3_SPEED = 179,
CM730_SERVO_4_SPEED = 180,
CM730_SERVO_5_SPEED = 181,
CM730_SERVO_6_SPEED = 182,
CM730_SERVO_7_SPEED = 183,
CM730_SERVO_8_SPEED = 184,
CM730_SERVO_9_SPEED = 185,
CM730_SERVO_10_SPEED = 186,
CM730_SERVO_11_SPEED = 187,
CM730_SERVO_12_SPEED = 188,
CM730_SERVO_13_SPEED = 189,
CM730_SERVO_14_SPEED = 190,
CM730_SERVO_15_SPEED = 191,
CM730_SERVO_16_SPEED = 192,
CM730_SERVO_17_SPEED = 193,
CM730_SERVO_18_SPEED = 194,
CM730_SERVO_19_SPEED = 195,
CM730_SERVO_20_SPEED = 196,
CM730_SERVO_21_SPEED = 197,
CM730_SERVO_22_SPEED = 198,
CM730_SERVO_23_SPEED = 199,
CM730_SERVO_24_SPEED = 200,
CM730_SERVO_25_SPEED = 201,
CM730_SERVO_26_SPEED = 202,
CM730_SERVO_27_SPEED = 203,
CM730_SERVO_28_SPEED = 204,
CM730_SERVO_29_SPEED = 205,
CM730_SERVO_30_SPEED = 206,
CM730_SERVO_1_ACCEL = 207,
CM730_SERVO_2_ACCEL = 208,
CM730_SERVO_3_ACCEL = 209,
CM730_SERVO_4_ACCEL = 210,
CM730_SERVO_5_ACCEL = 211,
CM730_SERVO_6_ACCEL = 212,
CM730_SERVO_7_ACCEL = 213,
CM730_SERVO_8_ACCEL = 214,
CM730_SERVO_9_ACCEL = 215,
CM730_SERVO_10_ACCEL = 216,
CM730_SERVO_11_ACCEL = 217,
CM730_SERVO_12_ACCEL = 218,
CM730_SERVO_13_ACCEL = 219,
CM730_SERVO_14_ACCEL = 220,
CM730_SERVO_15_ACCEL = 221,
CM730_SERVO_16_ACCEL = 222,
CM730_SERVO_17_ACCEL = 223,
CM730_SERVO_18_ACCEL = 224,
CM730_SERVO_19_ACCEL = 225,
CM730_SERVO_20_ACCEL = 226,
CM730_SERVO_21_ACCEL = 227,
CM730_SERVO_22_ACCEL = 228,
CM730_SERVO_23_ACCEL = 229,
CM730_SERVO_24_ACCEL = 230,
CM730_SERVO_25_ACCEL = 231,
CM730_SERVO_26_ACCEL = 232,
CM730_SERVO_27_ACCEL = 233,
CM730_SERVO_28_ACCEL = 234,
CM730_SERVO_29_ACCEL = 235,
CM730_SERVO_30_ACCEL = 236,
CM730_MODULE_SEL_1 = 237,
CM730_MODULE_SEL_2 = 238,
CM730_MODULE_SEL_3 = 239,
CM730_MODULE_SEL_4 = 240,
CM730_MODULE_SEL_5 = 241,
CM730_MODULE_SEL_6 = 242,
CM730_MODULE_SEL_7 = 243,
CM730_MODULE_SEL_8 = 244,
CM730_NUM_SERVOS = 245
}TRAMReg;
// public functions
void ram_init(void);
inline void ram_read_byte(uint8_t address, uint8_t *data);
inline void ram_read_word(uint8_t address, uint16_t *data);
uint8_t ram_read_table(uint8_t address, uint8_t length,uint8_t *data);
uint8_t ram_set_bit(uint8_t address, uint8_t bit);
uint8_t ram_clear_bit(uint8_t address, uint8_t bit);
uint8_t ram_write_byte(uint8_t address, uint8_t data);
uint8_t ram_write_word(uint8_t address, uint16_t data);
uint8_t ram_write_table(uint8_t address, uint8_t length,uint8_t *data);
#endif
#ifndef _SPI_H
#define _SPI_H
#include "stm32f10x.h"
//public functions
void spi_init(void);
void spi_read_byte(uint8_t address, uint8_t *data);
void spi_read_word(uint8_t address, uint16_t *data);
void spi_write_byte(uint8_t address, uint8_t data);
void spi_write_word(uint8_t address, uint16_t data);
#endif
/**
******************************************************************************
* @file Project/STM32F10x_StdPeriph_Template/stm32f10x_it.h
* @author MCD Application Team
* @version V3.5.0
* @date 08-April-2011
* @brief This file contains the headers of the interrupt handlers.
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_IT_H
#define __STM32F10x_IT_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
// NMI interrupt handler
void NMI_Handler(void);
void HardFault_Handler(void);
void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_IT_H */
#ifndef _SYSTEM_INIT_H
#define _SYSTEM_INIT_H
#include "stm32f10x.h"
void clocks_init(void);
#endif
#ifndef _TIME_H
#define _TIME_H
#include "stm32f10x.h"
void time_init(void);
void delay_ms(__IO uint32_t time);
#endif
#ifndef _UTILS_H
#define _UTILS_H
#include "stm32f10x.h"
inline uint16_t make_word(uint8_t msb,uint8_t lsb);
inline uint8_t get_msb(uint16_t data);
inline uint8_t get_lsb(uint16_t data);
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment