串口和中断写完

This commit is contained in:
2026-05-25 23:53:39 +08:00
parent 42ceefc5ad
commit 4f108bc26a
9 changed files with 33254 additions and 444 deletions
+18 -14
View File
@@ -2,7 +2,13 @@
#define __BSP_H__ #define __BSP_H__
#include "VoiletTypeDef.h" #include "VoiletTypeDef.h"
#include "Voilet.h"
/* Extra Library Enable */
#define USE_SHELL //系统使用Shell
#ifdef USE_SHELL
#include "LetterShell.h"
#endif
#define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0])) #define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))
@@ -26,12 +32,17 @@ typedef enum {
void VoiletBspInit(void); void VoiletBspInit(void);
/* BSP */ /* BSP */
void AllPeriphClockDisable(void);
void LedOn(uint8_t Chnl); void LedOn(uint8_t Chnl);
void LedOff(uint8_t Chnl); void LedOff(uint8_t Chnl);
void LedSet(uint8_t Chnl,uint8_t Value); void LedSet(uint8_t Chnl,uint8_t Value);
void LedToggle(uint8_t Chnl); void LedToggle(uint8_t Chnl);
//Interrupt
void IrqInit(void);
void IrqRegister(unsigned int Irq, void(*Func)(void *Param));
void IrqConfig(uint32_t Irq, uint8_t NvicPrePriority, uint8_t NvicSubPriority);
void IrqDisable(uint32_t Irq);
//System Delay //System Delay
void DelayConfig(void); void DelayConfig(void);
unsigned int DwtCntGet(void); unsigned int DwtCntGet(void);
@@ -39,18 +50,16 @@ void DelayUs(unsigned int Us);
void DelayMs(unsigned int Ms); void DelayMs(unsigned int Ms);
/* GPIO */ /* GPIO */
void GpioClockEnable(const GPIO_MAP_T *GpioX);
void GpioConfig(const GPIO_MAP_T *GpioX, GPIOMode_TypeDef GpioMode, GPIOSpeed_TypeDef GpioSpeed); void GpioConfig(const GPIO_MAP_T *GpioX, GPIOMode_TypeDef GpioMode, GPIOSpeed_TypeDef GpioSpeed);
void GpioSet(const GPIO_MAP_T *GpioX, uint8_t Value); void GpioSet(const GPIO_MAP_T *GpioX, uint8_t Value);
unsigned char GpioGet(const GPIO_MAP_T *GpioX); unsigned char GpioGet(const GPIO_MAP_T *GpioX);
/* UART */ /* UART */
void UartClockEnable(const COM_MAP_T *ComX); void ComSendChar(const COM_MAP_T *ComX,uint8_t Data);
// void UartSendChar(uint32_t ComId,uint8_t Data); void ComSendStr(const COM_MAP_T *ComX,uint8_t* Data, uint64_t Len);
// void UartSendStr(uint32_t ComId,uint8_t* Data, uint64_t Len); uint8_t ComReceiveChar(const COM_MAP_T *ComX);
// void UartStdConfig(COM_MAP_T ComX, uint32_t baud); void ComStdConfig(const COM_MAP_T *ComX, uint32_t Baud);
// void UartAdvConfig(const COM_MAP_T *ComX, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity); void ComAdvConfig(const COM_MAP_T *ComX, uint32_t Baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity);
// #define UartStdConfig(ComX, baud) UartStdConfig((COM_MAP_T)ComX, baud)
// /* 板级BSP头文件 */ // /* 板级BSP头文件 */
// #include "Board.h" // #include "Board.h"
@@ -86,11 +95,6 @@ void UartClockEnable(const COM_MAP_T *ComX);
// void LedOn(uint8_t Chnl); // void LedOn(uint8_t Chnl);
// //
// //
// //Interrupt
// void SystemInterruptInit(void);
// void InterruptRegister(uint32_t Irqn, void(*Func)(uint32_t));
// void InterruptSetLevel(uint32_t Vector, uint8_t NvicPrePriority, uint8_t NvicSubPriority);
// void InterruptDisable(uint32_t Vector);
// //
// //Usart // //Usart
// void SystemUsartInit(void); // void SystemUsartInit(void);
+1 -1
View File
@@ -3,6 +3,6 @@
#include "Bsp.h" #include "Bsp.h"
void LetterShellInit(uint32_t ComId, uint32_t baud); void LetterShellInit(const COM_MAP_T *ComX, uint32_t Baud);
#endif #endif
+138 -121
View File
@@ -11,163 +11,180 @@
#define INTERRUPT_DISABLE __set_PRIMASK(1); //关闭中断 #define INTERRUPT_DISABLE __set_PRIMASK(1); //关闭中断
typedef struct { typedef struct {
GPIO_TypeDef *Periph; void (*IrqCallback)(void *Param);
}IRQ_MAP_T;
#define IRQ_NUM 0xFF //中断数量
#define NVIC_GROUP_LEVEL NVIC_PriorityGroup_2 //中断组
typedef struct {
GPIO_TypeDef *GpioPort;
unsigned short GpioPin; unsigned short GpioPin;
} GPIO_PERIPH_T;
typedef struct {
void (*ClockCmd)(uint32_t RccPeriph, FunctionalState State);
unsigned int ClockTree;
GPIO_PERIPH_T Periph;
} GPIO_MAP_T; } GPIO_MAP_T;
// ==================== GPIOA 组 ==================== // ==================== GPIOA 组 ====================
#ifdef GPIOA #ifdef GPIOA
#define GPIO0 {GPIOA, GPIO_Pin_0} #define GPIO0 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_0}}
#define GPIO1 {GPIOA, GPIO_Pin_1} #define GPIO1 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_1}}
#define GPIO2 {GPIOA, GPIO_Pin_2} #define GPIO2 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_2}}
#define GPIO3 {GPIOA, GPIO_Pin_3} #define GPIO3 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_3}}
#define GPIO4 {GPIOA, GPIO_Pin_4} #define GPIO4 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_4}}
#define GPIO5 {GPIOA, GPIO_Pin_5} #define GPIO5 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_5}}
#define GPIO6 {GPIOA, GPIO_Pin_6} #define GPIO6 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_6}}
#define GPIO7 {GPIOA, GPIO_Pin_7} #define GPIO7 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_7}}
#define GPIO8 {GPIOA, GPIO_Pin_8} #define GPIO8 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_8}}
#define GPIO9 {GPIOA, GPIO_Pin_9} #define GPIO9 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_9}}
#define GPIO10 {GPIOA, GPIO_Pin_10} #define GPIO10 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_10}}
#define GPIO11 {GPIOA, GPIO_Pin_11} #define GPIO11 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_11}}
#define GPIO12 {GPIOA, GPIO_Pin_12} #define GPIO12 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_12}}
#define GPIO13 {GPIOA, GPIO_Pin_13} #define GPIO13 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_13}}
#define GPIO14 {GPIOA, GPIO_Pin_14} #define GPIO14 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_14}}
#define GPIO15 {GPIOA, GPIO_Pin_15} #define GPIO15 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_15}}
#endif #endif
#ifdef GPIOB #ifdef GPIOB
// ==================== GPIOB 组 ==================== // ==================== GPIOB 组 ====================
#define GPIO16 {GPIOB, GPIO_Pin_0} #define GPIO16 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_0}}
#define GPIO17 {GPIOB, GPIO_Pin_1} #define GPIO17 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_1}}
#define GPIO18 {GPIOB, GPIO_Pin_2} #define GPIO18 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_2}}
#define GPIO19 {GPIOB, GPIO_Pin_3} #define GPIO19 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_3}}
#define GPIO20 {GPIOB, GPIO_Pin_4} #define GPIO20 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_4}}
#define GPIO21 {GPIOB, GPIO_Pin_5} #define GPIO21 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_5}}
#define GPIO22 {GPIOB, GPIO_Pin_6} #define GPIO22 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_6}}
#define GPIO23 {GPIOB, GPIO_Pin_7} #define GPIO23 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_7}}
#define GPIO24 {GPIOB, GPIO_Pin_8} #define GPIO24 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_8}}
#define GPIO25 {GPIOB, GPIO_Pin_9} #define GPIO25 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_9}}
#define GPIO26 {GPIOB, GPIO_Pin_10} #define GPIO26 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_10}}
#define GPIO27 {GPIOB, GPIO_Pin_11} #define GPIO27 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_11}}
#define GPIO28 {GPIOB, GPIO_Pin_12} #define GPIO28 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_12}}
#define GPIO29 {GPIOB, GPIO_Pin_13} #define GPIO29 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_13}}
#define GPIO30 {GPIOB, GPIO_Pin_14} #define GPIO30 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_14}}
#define GPIO31 {GPIOB, GPIO_Pin_15} #define GPIO31 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOB, {GPIOB, GPIO_Pin_15}}
#endif #endif
#ifdef GPIOC #ifdef GPIOC
// ==================== GPIOC 组 ==================== // ==================== GPIOC 组 ====================
#define GPIO32 {GPIOC, GPIO_Pin_0} #define GPIO32 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_0}}
#define GPIO33 {GPIOC, GPIO_Pin_1} #define GPIO33 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_1}}
#define GPIO34 {GPIOC, GPIO_Pin_2} #define GPIO34 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_2}}
#define GPIO35 {GPIOC, GPIO_Pin_3} #define GPIO35 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_3}}
#define GPIO36 {GPIOC, GPIO_Pin_4} #define GPIO36 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_4}}
#define GPIO37 {GPIOC, GPIO_Pin_5} #define GPIO37 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_5}}
#define GPIO38 {GPIOC, GPIO_Pin_6} #define GPIO38 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_6}}
#define GPIO39 {GPIOC, GPIO_Pin_7} #define GPIO39 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_7}}
#define GPIO40 {GPIOC, GPIO_Pin_8} #define GPIO40 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_8}}
#define GPIO41 {GPIOC, GPIO_Pin_9} #define GPIO41 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_9}}
#define GPIO42 {GPIOC, GPIO_Pin_10} #define GPIO42 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_10}}
#define GPIO43 {GPIOC, GPIO_Pin_11} #define GPIO43 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_11}}
#define GPIO44 {GPIOC, GPIO_Pin_12} #define GPIO44 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_12}}
#define GPIO45 {GPIOC, GPIO_Pin_13} #define GPIO45 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_13}}
#define GPIO46 {GPIOC, GPIO_Pin_14} #define GPIO46 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_14}}
#define GPIO47 {GPIOC, GPIO_Pin_15} #define GPIO47 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOC, {GPIOC, GPIO_Pin_15}}
#endif #endif
#ifdef GPIOD #ifdef GPIOD
// ==================== GPIOD 组 ==================== // ==================== GPIOD 组 ====================
#define GPIO48 {GPIOD, GPIO_Pin_0} #define GPIO48 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_0}}
#define GPIO49 {GPIOD, GPIO_Pin_1} #define GPIO49 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_1}}
#define GPIO50 {GPIOD, GPIO_Pin_2} #define GPIO50 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_2}}
#define GPIO51 {GPIOD, GPIO_Pin_3} #define GPIO51 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_3}}
#define GPIO52 {GPIOD, GPIO_Pin_4} #define GPIO52 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_4}}
#define GPIO53 {GPIOD, GPIO_Pin_5} #define GPIO53 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_5}}
#define GPIO54 {GPIOD, GPIO_Pin_6} #define GPIO54 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_6}}
#define GPIO55 {GPIOD, GPIO_Pin_7} #define GPIO55 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_7}}
#define GPIO56 {GPIOD, GPIO_Pin_8} #define GPIO56 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_8}}
#define GPIO57 {GPIOD, GPIO_Pin_9} #define GPIO57 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_9}}
#define GPIO58 {GPIOD, GPIO_Pin_10} #define GPIO58 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_10}}
#define GPIO59 {GPIOD, GPIO_Pin_11} #define GPIO59 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_11}}
#define GPIO60 {GPIOD, GPIO_Pin_12} #define GPIO60 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_12}}
#define GPIO61 {GPIOD, GPIO_Pin_13} #define GPIO61 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_13}}
#define GPIO62 {GPIOD, GPIO_Pin_14} #define GPIO62 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_14}}
#define GPIO63 {GPIOD, GPIO_Pin_15} #define GPIO63 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOD, {GPIOD, GPIO_Pin_15}}
#endif #endif
#ifdef GPIOE #ifdef GPIOE
// ==================== GPIOE 组 ==================== // ==================== GPIOE 组 ====================
#define GPIO64 {GPIOE, GPIO_Pin_0} #define GPIO64 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_0}}
#define GPIO65 {GPIOE, GPIO_Pin_1} #define GPIO65 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_1}}
#define GPIO66 {GPIOE, GPIO_Pin_2} #define GPIO66 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_2}}
#define GPIO67 {GPIOE, GPIO_Pin_3} #define GPIO67 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_3}}
#define GPIO68 {GPIOE, GPIO_Pin_4} #define GPIO68 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_4}}
#define GPIO69 {GPIOE, GPIO_Pin_5} #define GPIO69 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_5}}
#define GPIO70 {GPIOE, GPIO_Pin_6} #define GPIO70 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_6}}
#define GPIO71 {GPIOE, GPIO_Pin_7} #define GPIO71 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_7}}
#define GPIO72 {GPIOE, GPIO_Pin_8} #define GPIO72 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_8}}
#define GPIO73 {GPIOE, GPIO_Pin_9} #define GPIO73 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_9}}
#define GPIO74 {GPIOE, GPIO_Pin_10} #define GPIO74 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_10}}
#define GPIO75 {GPIOE, GPIO_Pin_11} #define GPIO75 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_11}}
#define GPIO76 {GPIOE, GPIO_Pin_12} #define GPIO76 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_12}}
#define GPIO77 {GPIOE, GPIO_Pin_13} #define GPIO77 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_13}}
#define GPIO78 {GPIOE, GPIO_Pin_14} #define GPIO78 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_14}}
#define GPIO79 {GPIOE, GPIO_Pin_15} #define GPIO79 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOE, {GPIOE, GPIO_Pin_15}}
#endif #endif
#ifdef GPIOF #ifdef GPIOF
// ==================== GPIOF 组 ==================== // ==================== GPIOF 组 ====================
#define GPIO80 {GPIOF, GPIO_Pin_0} #define GPIO80 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_0}}
#define GPIO81 {GPIOF, GPIO_Pin_1} #define GPIO81 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_1}}
#define GPIO82 {GPIOF, GPIO_Pin_2} #define GPIO82 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_2}}
#define GPIO83 {GPIOF, GPIO_Pin_3} #define GPIO83 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_3}}
#define GPIO84 {GPIOF, GPIO_Pin_4} #define GPIO84 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_4}}
#define GPIO85 {GPIOF, GPIO_Pin_5} #define GPIO85 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_5}}
#define GPIO86 {GPIOF, GPIO_Pin_6} #define GPIO86 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_6}}
#define GPIO87 {GPIOF, GPIO_Pin_7} #define GPIO87 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_7}}
#define GPIO88 {GPIOF, GPIO_Pin_8} #define GPIO88 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_8}}
#define GPIO89 {GPIOF, GPIO_Pin_9} #define GPIO89 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_9}}
#define GPIO90 {GPIOF, GPIO_Pin_10} #define GPIO90 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_10}}
#define GPIO91 {GPIOF, GPIO_Pin_11} #define GPIO91 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_11}}
#define GPIO92 {GPIOF, GPIO_Pin_12} #define GPIO92 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_12}}
#define GPIO93 {GPIOF, GPIO_Pin_13} #define GPIO93 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_13}}
#define GPIO94 {GPIOF, GPIO_Pin_14} #define GPIO94 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_14}}
#define GPIO95 {GPIOF, GPIO_Pin_15} #define GPIO95 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOF, {GPIOF, GPIO_Pin_15}}
#endif #endif
#ifdef GPIOG #ifdef GPIOG
// ==================== GPIOG 组 ==================== // ==================== GPIOG 组 ====================
#define GPIO96 {GPIOG, GPIO_Pin_0} #define GPIO96 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_0}}
#define GPIO97 {GPIOG, GPIO_Pin_1} #define GPIO97 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_1}}
#define GPIO98 {GPIOG, GPIO_Pin_2} #define GPIO98 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_2}}
#define GPIO99 {GPIOG, GPIO_Pin_3} #define GPIO99 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_3}}
#define GPIO100 {GPIOG, GPIO_Pin_4} #define GPIO100 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_4}}
#define GPIO101 {GPIOG, GPIO_Pin_5} #define GPIO101 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_5}}
#define GPIO102 {GPIOG, GPIO_Pin_6} #define GPIO102 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_6}}
#define GPIO103 {GPIOG, GPIO_Pin_7} #define GPIO103 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_7}}
#define GPIO104 {GPIOG, GPIO_Pin_8} #define GPIO104 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_8}}
#define GPIO105 {GPIOG, GPIO_Pin_9} #define GPIO105 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_9}}
#define GPIO106 {GPIOG, GPIO_Pin_10} #define GPIO106 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_10}}
#define GPIO107 {GPIOG, GPIO_Pin_11} #define GPIO107 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_11}}
#define GPIO108 {GPIOG, GPIO_Pin_12} #define GPIO108 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_12}}
#define GPIO109 {GPIOG, GPIO_Pin_13} #define GPIO109 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_13}}
#define GPIO110 {GPIOG, GPIO_Pin_14} #define GPIO110 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_14}}
#define GPIO111 {GPIOG, GPIO_Pin_15} #define GPIO111 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_15}}
#endif #endif
#define GPIOEND {(GPIO_TypeDef *)0xFFFFFFFF, 0xFFFF} typedef struct {
USART_TypeDef *UartId;
unsigned int Irqn;
} COM_PERIPH_T;
typedef struct { typedef struct {
USART_TypeDef *Periph; void (*ClockCmd)(uint32_t RccPeriph, FunctionalState State);
unsigned int Irqn; unsigned int ClockTree;
COM_PERIPH_T Periph;
} COM_MAP_T; } COM_MAP_T;
#ifdef USART1 #ifdef USART1
#define COM0 {USART1,USART1_IRQn} #define COM0 (&(COM_MAP_T){RCC_APB2PeriphClockCmd, RCC_APB2Periph_USART1, {USART1,USART1_IRQn}})
#endif #endif
#ifdef USART2 #ifdef USART2
#define COM1 {USART2,USART2_IRQn} #define COM1 (&(COM_MAP_T){RCC_APB1PeriphClockCmd, RCC_APB1Periph_USART2, {USART2,USART2_IRQn}})
#endif #endif
#ifdef USART3 #ifdef USART3
#define COM2 {USART3,USART3_IRQn} #define COM2 (&(COM_MAP_T){RCC_APB1PeriphClockCmd, RCC_APB1Periph_USART3,{USART3,USART3_IRQn}})
#endif #endif
#ifdef UART4 #ifdef UART4
#define COM3 {UART4,UART4_IRQn} #define COM3 (&(COM_MAP_T){RCC_APB1PeriphClockCmd, RCC_APB1Periph_UART4,{UART4,UART4_IRQn}})
#endif #endif
#define COM4 {UART5,UART5_IRQn} #define COM4 (&(COM_MAP_T){RCC_APB1PeriphClockCmd, RCC_APB1Periph_UART5,{UART5,UART5_IRQn}})
#endif //VOILETTYPEDEF_H #endif //VOILETTYPEDEF_H
-59
View File
@@ -1,64 +1,5 @@
#include "Bsp.h" #include "Bsp.h"
void AllPeriphClockDisable(void);
/**
* @brief 关闭所有外设时钟
* @note void
* @param void
* @retval void
*/
void AllPeriphClockDisable(void)
{
// ==================== GPIOA 组 ====================
#ifdef GPIOA
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, DISABLE);
#endif
#ifdef GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, DISABLE);
// ==================== GPIOB 组 ====================
#endif
#ifdef GPIOC
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, DISABLE);
// ==================== GPIOC 组 ====================
#endif
#ifdef GPIOD
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, DISABLE);
// ==================== GPIOD 组 ====================
#endif
#ifdef GPIOE
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, DISABLE);
// ==================== GPIOE 组 ====================
#endif
#ifdef GPIOF
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, DISABLE);
// ==================== GPIOF 组 ====================
#endif
#ifdef GPIOG
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, DISABLE);
// ==================== GPIOG 组 ====================
#endif
#ifdef USART1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE);
#endif
#ifdef USART2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, DISABLE);
#endif
#ifdef USART3
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, DISABLE);
#endif
#ifdef UART4
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, DISABLE);
#endif
#ifdef UART5
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, DISABLE);
#endif
}
// //
// #ifdef USE_DIGITAL_OUTPUT // #ifdef USE_DIGITAL_OUTPUT
// GPIO_ST DigiTalOutPut[DO_NUM] = // GPIO_ST DigiTalOutPut[DO_NUM] =
+8 -26
View File
@@ -8,26 +8,7 @@
*/ */
void GpioClockEnable(const GPIO_MAP_T *GpioX) void GpioClockEnable(const GPIO_MAP_T *GpioX)
{ {
if(GpioX->Periph == GPIOA) GpioX->ClockCmd(GpioX->ClockTree,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
if(GpioX->Periph == GPIOB)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
if(GpioX->Periph == GPIOC)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
if(GpioX->Periph == GPIOD)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
if(GpioX->Periph == GPIOE)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
if(GpioX->Periph == GPIOF)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
if(GpioX->Periph == GPIOG)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
} }
/** /**
* @brief 配置GPIO口 * @brief 配置GPIO口
@@ -39,11 +20,12 @@ void GpioConfig(const GPIO_MAP_T *GpioX, GPIOMode_TypeDef GpioMode, GPIOSpeed_Ty
{ {
GPIO_InitTypeDef GpioInitSt; GPIO_InitTypeDef GpioInitSt;
GpioInitSt.GPIO_Pin = GpioX->GpioPin; GpioInitSt.GPIO_Pin = GpioX->Periph.GpioPin;
GpioInitSt.GPIO_Mode = GpioMode; GpioInitSt.GPIO_Mode = GpioMode;
GpioInitSt.GPIO_Speed = GpioSpeed; GpioInitSt.GPIO_Speed = GpioSpeed;
//打开外设时钟
GPIO_Init(GpioX->Periph, &GpioInitSt); GpioClockEnable(GpioX);
GPIO_Init(GpioX->Periph.GpioPort, &GpioInitSt);
} }
/** /**
* @brief 改变GPIO口状态 * @brief 改变GPIO口状态
@@ -55,11 +37,11 @@ void GpioSet(const GPIO_MAP_T *GpioX, uint8_t Value)
{ {
if (Value == (uint8_t)RESET) if (Value == (uint8_t)RESET)
{ {
GPIO_ResetBits(GpioX->Periph, GpioX->GpioPin); GPIO_ResetBits(GpioX->Periph.GpioPort, GpioX->Periph.GpioPin);
} }
else if (Value == (uint8_t)SET) else if (Value == (uint8_t)SET)
{ {
GPIO_SetBits(GpioX->Periph, GpioX->GpioPin); GPIO_SetBits(GpioX->Periph.GpioPort, GpioX->Periph.GpioPin);
} }
} }
/** /**
@@ -70,6 +52,6 @@ void GpioSet(const GPIO_MAP_T *GpioX, uint8_t Value)
*/ */
unsigned char GpioGet(const GPIO_MAP_T *GpioX) unsigned char GpioGet(const GPIO_MAP_T *GpioX)
{ {
return (unsigned char)GPIO_ReadInputDataBit(GpioX->Periph, GpioX->GpioPin); return (unsigned char)GPIO_ReadInputDataBit(GpioX->Periph.GpioPort, GpioX->Periph.GpioPin);
} }
+120 -114
View File
@@ -1,114 +1,120 @@
// #include "Bsp.h" #include "Bsp.h"
//
// INTERRUPT_ST Interrupt[INTERRUPT_NUM]; #define IRQ_NULL ((void *)0)
//
// /** IRQ_MAP_T IRQ_PERIPH[IRQ_NUM] = {0x00};
// * @brief 中断回调函数初始化为空
// * @param void /**
// * @retval void * @brief 中断回调函数初始化为空
// * @note 初始化系统中断 * @note 初始化系统中断
// * @example void * @param void
// */ * @retval void
// void SystemInterruptInit(void) */
// { void IrqInit(void)
// //设定系统中断组 {
// NVIC_PriorityGroupConfig(NVIC_GROUP_LEVEL); //设定系统中断组
// //清空结构体 NVIC_PriorityGroupConfig(NVIC_GROUP_LEVEL);
// for (uint8_t i = 0;i < INTERRUPT_NUM;i++) for (uint8_t i = 0; i < IRQ_NUM; i++) {
// { IRQ_PERIPH[i].IrqCallback = IRQ_NULL;
// Interrupt[i].CallBack = NULL; }
// } }
// }
// /**
// /** * @brief 中断回调函数注册
// * @brief 中断回调函数注册 * @note 将外部传入的函数地址关联到INTERRUPT_ST表中
// * @param Vector:中断号 void(*Func)(uint32_t):回调函数 * @param Vector:中断号 void(*Func)(uint32_t):回调函数
// * @retval void * @retval void
// * @note 将外部传入的函数地址关联到INTERRUPT_ST表中 */
// * @example void void IrqRegister(unsigned int Irq, void(*Func)(void *Param))
// */ {
// void InterruptRegister(uint32_t Irqn, void(*Func)(uint32_t)) IRQ_PERIPH[Irq].IrqCallback = Func;
// { }
// Interrupt[Irqn].CallBack = Func;
// } /**
// * @brief 中断NVIC配置
// /** * @note 设定一个中断的优先级
// * @brief 中断NVIC配置 * @param Vector:中断号 NvicPrePriority:主优先级 NvicSubPriority:抢占优先级
// * @param Vector:中断号 NvicPrePriority:主优先级 NvicSubPriority:抢占优先级 * @retval void
// * @retval void */
// * @note 设定一个中断的优先级 void IrqConfig(uint32_t Irq, uint8_t NvicPrePriority, uint8_t NvicSubPriority)
// * @example void {
// */ NVIC_InitTypeDef NVIC_InitStructure;
// void InterruptSetLevel(uint32_t Vector, uint8_t NvicPrePriority, uint8_t NvicSubPriority)
// { NVIC_InitStructure.NVIC_IRQChannel = Irq;
// NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NvicPrePriority;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = NvicSubPriority;
// NVIC_InitStructure.NVIC_IRQChannel = Vector; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NvicPrePriority; NVIC_Init(&NVIC_InitStructure);
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = NvicSubPriority; }
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_Init(&NVIC_InitStructure); /**
// } * @brief 关闭中断
// * @note void
// /** * @param Vector:中断号
// * @brief 关闭中断 * @retval void
// * @param Vector:中断号 */
// * @retval void void IrqDisable(uint32_t Irq)
// * @note void {
// * @example void NVIC_InitTypeDef NVIC_InitStructure;
// */ NVIC_InitStructure.NVIC_IRQChannel = Irq;
// void InterruptDisable(uint32_t Vector) NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// { NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
// NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_InitStructure.NVIC_IRQChannel = Vector; NVIC_Init(&NVIC_InitStructure);
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; }
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; void USART1_IRQHandler(void)
// NVIC_Init(&NVIC_InitStructure); {
// } if (USART_GetFlagStatus(COM0->Periph.UartId, USART_FLAG_ORE) == SET)
// {
// void USART1_IRQHandler(void) USART_ClearFlag(COM0->Periph.UartId, USART_FLAG_ORE);
// { }
// if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) == SET) if (IRQ_PERIPH[COM0->Periph.Irqn].IrqCallback != IRQ_NULL) {
// { IRQ_PERIPH[COM0->Periph.Irqn].IrqCallback(COM0);
// USART_ClearFlag(USART1, USART_FLAG_ORE); }
// } }
// (*Interrupt[USART1_IRQn].CallBack)((uint32_t)USART1);
// } void USART2_IRQHandler(void)
// {
// void USART2_IRQHandler(void) if (USART_GetFlagStatus(COM1->Periph.UartId, USART_FLAG_ORE) == SET)
// { {
// if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) == SET) USART_ClearFlag(COM1->Periph.UartId, USART_FLAG_ORE);
// { }
// USART_ClearFlag(USART2, USART_FLAG_ORE); if (IRQ_PERIPH[COM1->Periph.Irqn].IrqCallback != IRQ_NULL) {
// } IRQ_PERIPH[COM1->Periph.Irqn].IrqCallback(COM1);
// (*Interrupt[USART2_IRQn].CallBack)((uint32_t)USART2); }
// } }
//
// void USART3_IRQHandler(void) void USART3_IRQHandler(void)
// { {
// if (USART_GetFlagStatus(USART3, USART_FLAG_ORE) == SET) if (USART_GetFlagStatus(COM2->Periph.UartId, USART_FLAG_ORE) == SET)
// { {
// USART_ClearFlag(USART3, USART_FLAG_ORE); USART_ClearFlag(COM2->Periph.UartId, USART_FLAG_ORE);
// } }
// (*Interrupt[USART3_IRQn].CallBack)((uint32_t)USART3); if (IRQ_PERIPH[COM2->Periph.Irqn].IrqCallback != IRQ_NULL) {
// } IRQ_PERIPH[COM2->Periph.Irqn].IrqCallback(COM1);
// }
// }
// void USART4_IRQHandler(void)
// {
// if (USART_GetFlagStatus(UART4, USART_FLAG_ORE) == SET) void USART4_IRQHandler(void)
// { {
// USART_ClearFlag(UART4, USART_FLAG_ORE); if (USART_GetFlagStatus(COM3->Periph.UartId, USART_FLAG_ORE) == SET)
// } {
// (*Interrupt[UART4_IRQn].CallBack)((uint32_t)UART4); USART_ClearFlag(COM3->Periph.UartId, USART_FLAG_ORE);
// } }
// if (IRQ_PERIPH[COM3->Periph.Irqn].IrqCallback != IRQ_NULL) {
// void USART5_IRQHandler(void) IRQ_PERIPH[COM3->Periph.Irqn].IrqCallback(COM3);
// { }
// if (USART_GetFlagStatus(UART5, USART_FLAG_ORE) == SET) }
// {
// USART_ClearFlag(UART5, USART_FLAG_ORE); void USART5_IRQHandler(void)
// } {
// (*Interrupt[UART5_IRQn].CallBack)((uint32_t)UART5); if (USART_GetFlagStatus(COM4->Periph.UartId, USART_FLAG_ORE) == SET)
// } {
USART_ClearFlag(COM4->Periph.UartId, USART_FLAG_ORE);
}
if (IRQ_PERIPH[COM4->Periph.Irqn].IrqCallback != IRQ_NULL) {
IRQ_PERIPH[COM4->Periph.Irqn].IrqCallback(COM4);
}
}
+49 -52
View File
@@ -2,65 +2,62 @@
#include "shell.h" #include "shell.h"
/* 板级BSP头文件 */ /* 板级BSP头文件 */
#include "Bsp.h" #include "Bsp.h"
#include "Voilet.h"
#define WR_BUFFER_SIZE 512 #define WR_BUFFER_SIZE 512
/* 1. 创建shell对象,开辟shell缓冲区 */ /* 1. 创建shell对象,开辟shell缓冲区 */
Shell Host; //Shell实例化 Shell Host; //Shell实例化
char HostBuffer[WR_BUFFER_SIZE]; //读写缓冲区 char HostBuffer[WR_BUFFER_SIZE]; //读写缓冲区
uint32_t HostId; //串口号 const COM_MAP_T *HostCom = TTY_COM;
/**
* @brief Shell写函数
* @param ComId 串口号,ch 数据
* @retval void
* @note void
* @example void
*/
signed short ShellWrite(char* ch, unsigned short Len)
{
ComSendStr(HostCom, (uint8_t* )ch,Len);
return Len;
}
/**
* @brief Shell读函数 - 中断回调实现
* @param Vector 中断向量号
* @retval void
* @note void
* @example void
*/
void LetterShellIrqFunc(void *Param)
{
uint8_t ch = 0x00;
ch = ComReceiveChar(Param);
shellHandler(&Host, ch);
}
/**
* @brief 初始化Shell
* @param ComId 串口号,baud 波特率
* @retval void
* @note void
* @example void
*/
void LetterShellInit(const COM_MAP_T *ComX, uint32_t Baud)
{
//初始化串口
ComStdConfig(ComX, Baud);
//设置串口回调函数
IrqRegister(ComX->Periph.Irqn, LetterShellIrqFunc);
//设置中断等级
IrqConfig(ComX->Periph.Irqn,1,1);
//注册写函数
Host.write = ShellWrite;
//初始化LetterShell
shellInit(&Host, HostBuffer, WR_BUFFER_SIZE);
}
// /**
// * @brief Shell写函数
// * @param ComId 串口号,ch 数据
// * @retval void
// * @note void
// * @example void
// */
// signed short ShellWrite(char* ch, unsigned short Len)
// {
// UsartSendStr(HostId, (uint8_t* )ch,Len);
// return Len;
// }
// /**
// * @brief Shell读函数 - 中断回调实现
// * @param Vector 中断向量号
// * @retval void
// * @note void
// * @example void
// */
// void LetterShellIrqFunc(uint32_t Vector)
// {
// uint8_t ch = 0x00;
// ch = UsartReceiveChar(Vector);
//
// shellHandler(&Host, ch);
// }
//
//
// /**
// * @brief 初始化Shell
// * @param ComId 串口号,baud 波特率
// * @retval void
// * @note void
// * @example void
// */
// void LetterShellInit(uint32_t ComId, uint32_t baud)
// {
// HostId = ComId;
//
// //初始化串口
// UsartStdConfig(ComId, baud);
// //设置串口回调函数
// InterruptRegister(TTY_COM_IRQN, LetterShellIrqFunc);
// //设置中断等级
// InterruptSetLevel(TTY_COM_IRQN,1,1);
// //注册写函数
// Host.write = ShellWrite;
//
// shellInit(&Host, HostBuffer, WR_BUFFER_SIZE);
// }
//
// /** // /**
// * @brief 打印版本号 // * @brief 打印版本号
// * @param void // * @param void
+30 -56
View File
@@ -3,37 +3,21 @@
/** /**
* @brief 初始化UART口外设的时钟 * @brief 初始化UART口外设的时钟
* @note void * @note void
* @param void * @param ComX:串口号
* @retval void * @retval void
*/ */
void UartClockEnable(const COM_MAP_T *ComX) void UartClockEnable(const COM_MAP_T *ComX)
{ {
if (ComX->Periph == USART1) ComX->ClockCmd(ComX->ClockTree,ENABLE);
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
}
if (ComX->Periph == USART2) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}
if (ComX->Periph == USART3) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
}
if (ComX->Periph == UART4) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
}
if (ComX->Periph == UART5) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
}
} }
/** /**
* @brief 初始化USART口 * @brief 初始化USART口
* @param ComId 串口号 baud 波特率 DataBits 数据位 StopBits 停止位 Parity校验位 * @note void
* @param Comx 串口号 baud 波特率 DataBits 数据位 StopBits 停止位 Parity校验位
* @retval void * @retval void
* @note void
* @example void
*/ */
void UartInit(const COM_MAP_T *Comx, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity) void ComInit(const COM_MAP_T *ComX, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
{ {
USART_InitTypeDef UsartInitSt; USART_InitTypeDef UsartInitSt;
@@ -45,76 +29,66 @@ void UartInit(const COM_MAP_T *Comx, uint32_t baud, uint8_t DataBits, uint8_t St
UsartInitSt.USART_Parity = Parity; UsartInitSt.USART_Parity = Parity;
UsartInitSt.USART_HardwareFlowControl = USART_HardwareFlowControl_None; UsartInitSt.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
UsartInitSt.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; UsartInitSt.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(Comx->Periph, &UsartInitSt); UartClockEnable(ComX);
USART_Init(ComX->Periph.UartId, &UsartInitSt);
//配置中断 //配置中断
USART_ITConfig(Comx->Periph, USART_IT_RXNE, ENABLE); USART_ITConfig(ComX->Periph.UartId, USART_IT_RXNE, ENABLE);
//启用串口 //启用串口
USART_Cmd(Comx->Periph, ENABLE); USART_Cmd(ComX->Periph.UartId, ENABLE);
} }
/** /**
* @brief USART口发送数据 * @brief USART口发送数据
* @param ComId 串口号 Data数据 * @note void
* @param ComX 串口号 Data数据
* @retval void * @retval void
* @note void
* @example void
*/ */
void UartSendChar(uint32_t ComId,uint8_t Data) void ComSendChar(const COM_MAP_T *ComX,uint8_t Data)
{ {
USART_SendData((USART_TypeDef*)ComId, Data); USART_SendData(ComX->Periph.UartId, Data);
while (USART_GetFlagStatus((USART_TypeDef*)ComId, USART_FLAG_TC) != SET); while (USART_GetFlagStatus(ComX->Periph.UartId, USART_FLAG_TC) != SET);
} }
/** /**
* @brief USART口发送字符串 * @brief USART口发送字符串
* @param ComId 串口号 Data数据 Len 长度 * @note void
* @param ComX 串口号 Data数据 Len 长度
* @retval void * @retval void
* @note void
* @example void
*/ */
void UartSendStr(uint32_t ComId,uint8_t* Data, uint64_t Len) void ComSendStr(const COM_MAP_T *ComX,uint8_t *Data, uint64_t Len)
{ {
for (uint64_t i = 0;i < Len;i++) for (uint64_t i = 0;i < Len;i++)
{ {
USART_SendData((USART_TypeDef*)ComId, Data[i]); USART_SendData(ComX->Periph.UartId, Data[i]);
while (USART_GetFlagStatus((USART_TypeDef*)ComId, USART_FLAG_TC) != SET); while (USART_GetFlagStatus(ComX->Periph.UartId, USART_FLAG_TC) != SET);
} }
} }
/** /**
* @brief USART口发送数据 * @brief USART口发送数据
* @param ComId 串口号 * @note void
* @param ComX 串口号
* @retval 读取的数据 * @retval 读取的数据
* @note void
* @example void
*/ */
uint8_t UartReceiveChar(uint32_t ComId) uint8_t ComReceiveChar(const COM_MAP_T *ComX)
{ {
return USART_ReceiveData((USART_TypeDef*)ComId); return USART_ReceiveData(ComX->Periph.UartId);
} }
/** /**
* @brief 通用USART配置 * @brief 通用USART配置
* @note void * @note void
* @param ComId 串口号 baud 波特率 * @param ComX 串口号 baud 波特率
* @retval void * @retval void
*/ */
void UartStdConfig(COM_MAP_T ComX, uint32_t baud) void ComStdConfig(const COM_MAP_T *ComX, uint32_t Baud)
{ {
UartInit(&ComX, baud, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No); ComInit(ComX, Baud, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No);
} }
/** /**
* @brief 高级串口配置 * @brief 高级串口配置
* @note void * @note void
* @param ComId 串口号 baud 波特率 Data Bits 数据位 StopBits 停止位 Parity校验位 * @param ComX 串口号 baud 波特率 Data Bits 数据位 StopBits 停止位 Parity校验位
* @retval void * @retval void
*/ */
void UartAdvConfig(const COM_MAP_T *ComX, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity) void ComAdvConfig(const COM_MAP_T *ComX, uint32_t Baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
{ {
UartInit(ComX, baud, DataBits, StopBits, Parity); ComInit(ComX, Baud, DataBits, StopBits, Parity);
} }
File diff suppressed because it is too large Load Diff