| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437 | /************************************************************************************************************                                                xmk guide**                                 (c) Copyright 2016-2020, hualijidian.com*                                           All Rights Reserved** @file     hi.c* @author   eric* @brief    hardware interface* @version  V0.0.1**********************************************************************************************************/#ifndef __HI_H#define __HI_H#include "hitest.h"#include "iocfg.h"#include "sys.h"#include "SysTick.h"#include "Wdg.h"/*** @defgroup LED* @brief    板载状态灯*/#define BPS_LED_HIGH 0#define BPS_LED_LOW  1//#define LED0 PCout(1)/*** @defgroup LED* @brief    信号状态灯*/#define SIGNAL_LED_HIGH 1#define SIGNAL_LED_LOW  0//#define HI_LED1 PFout(4)//#define HI_LED2 PFout(3)//#define HI_LED3 PFout(2)void HI_STATUS_LED_Init(void);void HI_LED_Init(void);#define digitalHi(p, i) \  { p->BSRRL = i; }  //设置为高电平#define digitalLo(p, i) \  { p->BSRRH = i; }  //输出低电平#define digitalToggle(p, i) \  { p->ODR ^= i; }  //输出反转状态#define HI_LED0_TOGGLE digitalToggle(LED0_GPRO, LED0_PIN)#define HI_LED0_OFF digitalHi(LED0_GPRO, LED0_PIN)#define HI_LED0_ON digitalLo(LED0_GPRO, LED0_PIN)#define HI_LED1_TOGGLE digitalToggle(LED_ST1_GPIO, LED_ST1_PIN)#define HI_LED1_OFF digitalHi(LED_ST1_GPIO, LED_ST1_PIN)#define HI_LED1_ON digitalLo(LED_ST1_GPIO, LED_ST1_PIN)#define HI_LED2_TOGGLE digitalToggle(LED_ST2_GPIO, LED_ST2_PIN)#define HI_LED2_OFF digitalHi(LED_ST2_GPIO, LED_ST2_PIN)#define HI_LED2_ON digitalLo(LED_ST2_GPIO, LED_ST2_PIN)#define HI_LED3_TOGGLE digitalToggle(LED_ST3_GPIO, LED_ST3_PIN)#define HI_LED3_OFF digitalHi(LED_ST3_GPIO, LED_ST3_PIN)#define HI_LED3_ON digitalLo(LED_ST3_GPIO, LED_ST3_PIN)/*** @defgroup IO* @brief    通用IO定义*/#define HI_IO_IN_HIGH 0#define HI_IO_IN_LOW 0//#define HI_IO_IN0 (PDin(5))//#define HI_IO_IN1 (PDin(4))//#define HI_IO_IN2 (PDin(3))//#define HI_IO_IN3 (PDin(1))//#define HI_IO_IN4 (PDin(0))//#define HI_IO_IN5 (PAin(15))#define HI_BTN_START HI_IO_IN4#define HI_IO_OUT_HIGH 0#define HI_IO_OUT_LOW 1//#define HI_IO_OUT0 PDout(6)//#define HI_IO_OUT1 PDout(7)//#define HI_IO_OUT2 PGout(9)//#define HI_IO_OUT3 PGout(10)//#define HI_IO_OUT4 PGout(11)//#define HI_IO_OUT5 PGout(12)/*** @defgroup USART IO* @note 不知道这么搞合适不*/#define USART4 UART4#define USART5 UART5#define USART7 UART7#define USART8 UART8/*** @defgroup MOTOR IO* @note 这里的HIGHT LOW是为了屏蔽硬件取反*/#define HI_MOTOR_EN_HIGH 1#define HI_MOTOR_EN_LOW 0#define HI_MOTOR_FW_HIGH 1#define HI_MOTOR_FW_LOW 0#define HI_MOTOR_BK_HIGH 1#define HI_MOTOR_BK_LOW 0//#define HI_MOTOR0_EN PDout(9)//#define HI_MOTOR1_EN PGout(2)//#define HI_MOTOR2_EN PGout(5)//#define HI_MOTOR3_EN PGout(8)////#define HI_MOTOR0_FW PDout(10)//#define HI_MOTOR1_FW PGout(3)//#define HI_MOTOR2_FW PGout(6)//#define HI_MOTOR3_FW PCout(8)////#define HI_MOTOR0_BK PDout(8)//#define HI_MOTOR1_BK PDout(11)//#define HI_MOTOR2_BK PGout(4)//#define HI_MOTOR3_BK PGout(7)#define PWM_TIM4 TIM4#define PWM_TIM9 TIM9/*** @defgroup GS* @brief Guide sensor 导航传感器引脚* @note 分为2组*/#define HI_GS_IN_HIGH 1#define HI_GS_IN_LOW 0//#define HI_GS0_IN0 !PGin(13)//#define HI_GS0_IN1 !PGin(14)//#define HI_GS0_IN2 !PGin(15)//#define HI_GS0_IN3 !PBin(3)//#define HI_GS0_IN4 !PBin(4)//#define HI_GS0_IN5 !PBin(5)//#define HI_GS0_IN6 !PBin(6)//#define HI_GS0_IN7 !PBin(7)////#define HI_GS1_IN0 !PBin(8)//#define HI_GS1_IN1 !PBin(9)//#define HI_GS1_IN2 !PEin(2)//#define HI_GS1_IN3 !PEin(3)//#define HI_GS1_IN4 !PEin(4)//#define HI_GS1_IN5 !PEin(5)//#define HI_GS1_IN6 !PEin(6)//#define HI_GS1_IN7 !PCin(13)/*** @defgroup OBS* @brief Obstacle Sensor io define* @note PBS has 4*IN 4*OUT PX has 2 * IN 0 OUT, so PX can use part of PBS in*/#define HI_OBS_IN_HIGH 0#define HI_OBS_IN_LOW 1#define HI_OBS_OUT_HIGH 1#define HI_OBS_OUT_LOW 0//#define LANDMARK_GS_IN0 !PCin(2)//#define LANDMARK_GS_IN1 !PCin(3)////#define LANDMARK_GS_IN2 !PAin(0)//#define LANDMARK_GS_IN3 !PAin(1)////#define LANDMARK_GS_IN4 !PBin(1)//#define LANDMARK_GS_IN5 !PFin(11)////#define LANDMARK_GS_IN6 !PFin(12)//#define LANDMARK_GS_IN7 !PFin(13)/* OBS0 IO *///#define HI_OBS0_IN0 !PCin(2)//#define HI_OBS0_IN1 !PCin(3)//#define HI_OBS0_OUT0 PAout(4)//#define HI_OBS0_OUT1 PCout(4)/* OBS1 IO *///#define HI_OBS1_IN0 !PAin(0)//#define HI_OBS1_IN1 !PAin(1)//#define HI_OBS1_OUT0 PCout(5)//#define HI_OBS1_OUT1 PBout(0)/* OBS2 IO *///#define HI_OBS2_IN0 !PBin(1)//#define HI_OBS2_IN1 !PFin(11)//#define HI_OBS2_OUT0 PFout(14)//#define HI_OBS2_OUT1 PFout(15)/* OBS3 IO *///#define HI_OBS3_IN0 !PFin(12)//#define HI_OBS3_IN1 !PFin(13)//#define HI_OBS3_OUT0 PGout(0)//#define HI_OBS3_OUT1 PGout(1)#define HI_OB_IN_HIGH 1#define HI_OB_IN_LOW 0//#define HI_OB_IN0 !PBin(12)//#define HI_OB_IN1 !PBin(13)//#define HI_OB_IN2 !PBin(14)//#define HI_OB_IN3 !PBin(15)/*** @defgroup Infra-red* @brief IR Obstacle Sensor io define*/#define Lift_IN_HIGH 1#define Lift_IN_LOW 0//#define HI_Lift_IN0 !PEin(7)//#define HI_Lift_IN1 !PEin(8)//#define HI_Lift_IN2 !PEin(9)//#define HI_Lift_IN3 !PEin(10)//#define HI_Lift_OUT0 PEout(11)//#define HI_Lift_OUT1 PEout(13)/** * @defgroup HI_Init_Function * @brief heardware interface */void HI_Delay_Init(void);void HI_IO_Init(void);void HI_MOTOR_Init(void);int UartConfig(USART_TypeDef *USARTx, u32 baudrate, u16 parity);void HI_USART1_Init(u32 baudrate);void HI_USART2_Init(u32 baudrate);void HI_USART3_Init(u32 baudrate);void HI_USART4_Init(u32 baudrate);void HI_USART5_Init(u32 baudrate);void HI_USART6_Init(u32 baudrate);void HI_USART7_Init(u32 baudrate);void HI_USART8_Init(u32 baudrate);/** * @defgroup HI_XXX_Function * @brief heardware interface *//* USART */#define USART_TXEMPTY(USARTx) ((USARTx)->SR & USART_FLAG_TC)#define USART_WAIT(USARTx)         \  do {                             \    while (!USART_TXEMPTY(USARTx)) \      ;                            \  } while (0)#define HI_USART1_Putc(c)           \  do {                              \    USART_WAIT(USART1);             \    USART1->DR = (u16)(c & 0x01FF); \    USART_WAIT(USART1);             \  } while (0)#define HI_USART2_Putc(c)           \  do {                              \    USART_WAIT(USART2);             \    USART2->DR = (u16)(c & 0x01FF); \    USART_WAIT(USART2);             \  } while (0)#define HI_USART3_Putc(c)           \  do {                              \    USART_WAIT(USART3);             \    USART3->DR = (u16)(c & 0x01FF); \    USART_WAIT(USART3);             \  } while (0)#define HI_USART4_Putc(c)          \  do {                             \    USART_WAIT(UART4);             \    UART4->DR = (u16)(c & 0x01FF); \    USART_WAIT(UART4);             \  } while (0)#define HI_USART5_Putc(c)          \  do {                             \    USART_WAIT(UART5);             \    UART5->DR = (u16)(c & 0x01FF); \    USART_WAIT(UART5);             \  } while (0)#define HI_USART6_Putc(c)           \  do {                              \    USART_WAIT(USART6);             \    USART6->DR = (u16)(c & 0x01FF); \    USART_WAIT(USART6);             \  } while (0)#define HI_USART7_Putc(c)           \  do {                              \    USART_WAIT(USART7);             \    USART7->DR = (u16)(c & 0x01FF); \    USART_WAIT(USART7);             \  } while (0)#define HI_USART8_Putc(c)           \  do {                              \    USART_WAIT(USART8);             \    USART8->DR = (u16)(c & 0x01FF); \    USART_WAIT(USART8);             \  } while (0)void HI_SendString(USART_TypeDef *USARTx, char *pt);#define HI_Putc(c)                  \  do {                              \    USART1->DR = (u16)(c & 0x01FF); \    while (!USART_TXEMPTY(USART1))  \      ;                             \  } while (0)int UartConfig(USART_TypeDef *USARTx, u32 baudrate, u16 parity);void HI_USART1_Send(u8 *ch, int len);void HI_USART2_Send(u8 *ch, int len);void HI_USART3_Send(u8 *ch, int len);void HI_USART4_Send(u8 *ch, int len);void HI_USART5_Send(u8 *ch, int len);void HI_USART6_Send(u8 *ch, int len);void HI_USART7_Send(u8 *ch, int len);void HI_USART8_Send(u8 *ch, int len);void HI_USART1_Puts(char *str);void HI_USART2_Puts(char *str);void HI_USART3_Puts(char *str);void HI_USART4_Puts(char *str);void HI_USART5_Puts(char *str);void HI_USART6_Puts(char *str);void HI_USART7_Puts(char *str);void HI_USART8_Puts(char *str);typedef void (*USART_RecvCallback_t)(u8);void USART1_SetRecvCallback(USART_RecvCallback_t callback);void HI_USART2_SetRecvCallback(USART_RecvCallback_t callback);void HI_USART3_SetRecvCallback(USART_RecvCallback_t callback);void HI_USART4_SetRecvCallback(USART_RecvCallback_t callback);void HI_USART5_SetRecvCallback(USART_RecvCallback_t callback);void HI_USART6_SetRecvCallback(USART_RecvCallback_t callback);void HI_USART7_SetRecvCallback(USART_RecvCallback_t callback);void HI_USART8_SetRecvCallback(USART_RecvCallback_t callback);#define RS485_TX_EN		PFout(10)/* MOTOR */#define HI_MOTOR_PWM_TIME 4/** * @brief  Set motor speed * @param  speed 0~100 percent of speed * @retval None * @note   速度百分比换算成PWM的倍速,最高499,电机不满负荷转动 speed * * HI_MOTOR_PWM_TIME = 80% PWM 左右即可 */#define MOTOR1_Speed(speed) (PWM_TIM9->CCR1 = (speed))#define MOTOR2_Speed(speed) (PWM_TIM9->CCR2 = (speed))#define LIFT1_Speed(speed) (PWM_TIM4->CCR2 = (speed))#define LIFT2_Speed(speed) (PWM_TIM4->CCR1 = (speed))/** * @defgroup OBS *//* WIFI */#define WIFI_Putc HI_USART6_Putc#define WIFI_Send HI_USART6_Send#define WIFI_Puts HI_USART6_Putsvoid VoiceInput(u8 res);/** * @defgroup ROM *//*** @brief  记录配置* @param  addr 地址 支持256个* @param  val 配置数据,32位整形* @retval 0 success 1 fail*/int HI_ROM_Write(u8 addr, u32 val);/*** @brief  读取配置* @param  addr 地址 支持256个* @param  defval 读出错误时的默认值,32位整形* @retval 0 success 1 fail*/u32 HI_ROM_Read(u8 addr, u32 defval);#define STM32_FLASH_BASE 0x08000000#define ADDR_FLASH_SECTOR_0     ((u32)0x08000000)#define ADDR_FLASH_SECTOR_1     ((u32)0x08004000)#define ADDR_FLASH_SECTOR_2     ((u32)0x08008000)#define ADDR_FLASH_SECTOR_3     ((u32)0x0800C000)#define ADDR_FLASH_SECTOR_4     ((u32)0x08010000)#define ADDR_FLASH_SECTOR_5     ((u32)0x08020000)#define ADDR_FLASH_SECTOR_6     ((u32)0x08040000)#define ADDR_FLASH_SECTOR_7     ((u32)0x08060000)#define ADDR_FLASH_SECTOR_8     ((u32)0x08080000)#define ADDR_FLASH_SECTOR_9     ((u32)0x080A0000)#define ADDR_FLASH_SECTOR_10    ((u32)0x080C0000)#define ADDR_FLASH_SECTOR_11    ((u32)0x080E0000)u32 STMFLASH_ReadWord(u32 faddr);void STMFLASH_Write(u32 WriteAddr, u32 *pBuffer, u32 NumToWrite);void STMFLASH_Read(u32 ReadAddr, u32 *pBuffer, u32 NumToRead);void HI_Test(void);/*** @brief  ADC* @param  4096* @param* @retval*/void HI_ADC_Init(void);u16 HI_ADC_Get(u8 ch);u16 Get_Adc_Average(u8 ch,u8 times);u16 HI_ADC_Get_Average(u8 ch, u8 times);/*** @brief  TIM7 for main loop* @param* @param* @retval*/void HI_MainLoopInit(void);void HI_MainLoop(void);/** * @brief  volt imput * @param * @retval * @note */u32 HI_Battery_GetVolt(void);u16 HI_Angle_GetFront(void);u16 HI_Angle_GetBack(void);#endif  //__HI_H
 |