#ifndef __BSP_H__ #define __BSP_H__ #include "stm32f1xx_hal.h" #include "stdbool.h" #include "main.h" #include "tim.h" typedef enum { ID_TYPE_HID = 0X00, //0x00 ~ 0x10 都是界面 ID_TYPE_MOT = 0x40, //0x40 ~ 0x7F 都是伺服电机 ID_TYPE_DIO = 0x80, //0x80 ~ 0x90 都是数字输入和输出 ID_TYPE_ANL = 0xA0, //0xA0 ~ 0xB0 都是模拟量 }ID_TYPE_ENUM; typedef enum { COMM_TYPE_485 = 0, COMM_TYPE_CAN = !COMM_TYPE_485 }COMM_TYPE_ENUM; typedef enum { COMM_DIR_RX = 0x00, COMM_DIR_TX = !COMM_DIR_RX }COMM_DIR_ENUM; typedef enum { LED_STATE_OFF = 0x00, LED_STATE_ON = !LED_STATE_OFF, }LED_STATE_ENUM; typedef enum { LED_GREEN = 0x01, LED_RED = 0x02, }LED_CHANNEL_ENUM; typedef enum { MOTOR_MS_1 = 1, MOTOR_MS_8 = 8, MOTOR_MS_16 = 16, MOTOR_MS_32 = 32, MOTOR_MS_64 = 64 }MOTOR_MS_ENUM; typedef enum { MOTOR_DIR_CW = 0x00, MOTOR_DIR_CCW = !MOTOR_DIR_CW, }MOTOR_DIR_ENUM; typedef enum { MOTOR_DISNABLE = 0x00, MOTOR_ENABLE = !MOTOR_DISNABLE, }MOTOR_STATE_ENUM; typedef struct SERIAL_s { char *name; UART_HandleTypeDef *huart; uint8_t *recv_buff; size_t recv_head; size_t recv_tail; size_t recv_buff_len; size_t recv_max_used_len; unsigned char isOverLoop; uint8_t *send_buff[2]; size_t send_head; size_t send_tail; size_t send_buff_len; size_t send_max_used_len; uint8_t sel; bool sending; bool isbusy; void (*setDir)(COMM_DIR_ENUM dir); struct SERIAL_s *next_ptr; }SERIAL_t; typedef SERIAL_t* SERIAL_ptr; extern SERIAL_t serial1; extern SERIAL_t serial3; unsigned char SYS_getID(void); unsigned char SYS_getKey(void); void COMM_setSel(COMM_TYPE_ENUM type); void COMM_setDir(COMM_DIR_ENUM dir); void LED_setState(LED_CHANNEL_ENUM channel,LED_STATE_ENUM state); void LED_setToggle(LED_CHANNEL_ENUM channel); void MOTOR_setMS(MOTOR_MS_ENUM ms); void MOTOR_setEn(MOTOR_STATE_ENUM state); void MOTOR_setDir(MOTOR_DIR_ENUM dir); void MOTOR_setStep(unsigned char step); int SERIAL_Init(SERIAL_t *serial,char *name,UART_HandleTypeDef *huart,size_t send_len, size_t recv_len); bool SERIAL_Write(SERIAL_t *serial, uint8_t *data, size_t len); size_t SERIAL_Read(SERIAL_t *serial, uint8_t *buff, size_t maxlen); void SERIAL_StartRecv(SERIAL_t *serial); void SERIAL_StopRecv(SERIAL_t *serial); extern volatile uint32_t tick_count_200Hz; void tick_init(void); void tick_count(void); uint32_t get_ticks_msec(void); uint32_t get_ticks_usec(void); void HAL_Delay_usec(uint32_t ticks_usec); #endif //end BSP_H