Compare commits
4 Commits
9f38c6ea75
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 249409457f | |||
| 9869835739 | |||
| cfad5acd82 | |||
| 0516210c95 |
+5
-31
@@ -1,37 +1,11 @@
|
|||||||
#ifndef __BSP_H__
|
#ifndef __BSP_H__
|
||||||
#define __BSP_H__
|
#define __BSP_H__
|
||||||
|
|
||||||
#include "VoiletTypeDef.h"
|
/* Board */
|
||||||
|
#include "Board.h"
|
||||||
/* Extra Library Enable */
|
|
||||||
#define USE_SHELL //系统使用Shell
|
|
||||||
|
|
||||||
#ifdef USE_SHELL
|
|
||||||
#include "LetterShell.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))
|
|
||||||
|
|
||||||
/* BOOL类型定义 */
|
|
||||||
typedef enum {
|
|
||||||
false = 0,
|
|
||||||
true = 1,
|
|
||||||
} bool_t;
|
|
||||||
|
|
||||||
//GPIO
|
|
||||||
//数组信号输入/出开关
|
|
||||||
#define DI_ON 1
|
|
||||||
#define DI_OFF 0
|
|
||||||
#define DO_ON 1
|
|
||||||
#define DO_OFF 0
|
|
||||||
//LED灯开关
|
|
||||||
#define LED_ON 0
|
|
||||||
#define LED_OFF 1
|
|
||||||
|
|
||||||
/* Voilet */
|
|
||||||
void VoiletBspInit(void);
|
|
||||||
|
|
||||||
/* BSP */
|
/* BSP */
|
||||||
|
void BspInit(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);
|
||||||
@@ -39,8 +13,8 @@ void LedToggle(uint8_t Chnl);
|
|||||||
|
|
||||||
//Interrupt
|
//Interrupt
|
||||||
void IrqInit(void);
|
void IrqInit(void);
|
||||||
void IrqRegister(unsigned int Irq, void(*Func)(void *Param));
|
void IrqRegister(unsigned char Irqn,void(*Func)(void *Param));
|
||||||
void IrqConfig(uint32_t Irq, uint8_t NvicPrePriority, uint8_t NvicSubPriority);
|
void IrqEnable(uint32_t Irq, uint8_t NvicPrePriority, uint8_t NvicSubPriority);
|
||||||
void IrqDisable(uint32_t Irq);
|
void IrqDisable(uint32_t Irq);
|
||||||
|
|
||||||
//System Delay
|
//System Delay
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
#ifndef __LETTER_SHELL_H__
|
|
||||||
#define __LETTER_SHELL_H__
|
|
||||||
|
|
||||||
#include "Bsp.h"
|
|
||||||
|
|
||||||
void LetterShellInit(const COM_MAP_T *ComX, uint32_t Baud);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -2,24 +2,53 @@
|
|||||||
// Created by anonymous on 2026/5/24.
|
// Created by anonymous on 2026/5/24.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef VOILETTYPEDEF_H
|
#ifndef _VOILET_PORT_H
|
||||||
#define VOILETTYPEDEF_H
|
#define _VOILET_PORT_H
|
||||||
|
|
||||||
#include "stm32f10x.h"
|
#include "stm32f10x.h"
|
||||||
|
|
||||||
#define INTERRUPT_ENABLE __set_PRIMASK(0); //开启中断
|
#define INTERRUPT_ENABLE __set_PRIMASK(0); //开启中断
|
||||||
#define INTERRUPT_DISABLE __set_PRIMASK(1); //关闭中断
|
#define INTERRUPT_DISABLE __set_PRIMASK(1); //关闭中断
|
||||||
|
|
||||||
|
#define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||||
|
|
||||||
|
/* BOOL类型定义 */
|
||||||
|
typedef enum {
|
||||||
|
false = 0,
|
||||||
|
true = 1,
|
||||||
|
} BOOL_MAP_T;
|
||||||
|
|
||||||
|
/* DI数字信号采集枚举 */
|
||||||
|
enum {
|
||||||
|
DI_OFF = 0,
|
||||||
|
DI_ON
|
||||||
|
};
|
||||||
|
/* DO数字信号输出枚举 */
|
||||||
|
enum {
|
||||||
|
DO_OFF = 0,
|
||||||
|
DO_ON
|
||||||
|
};
|
||||||
|
/* LED灯输出枚举 */
|
||||||
|
enum {
|
||||||
|
LED_OFF = 0,
|
||||||
|
LED_ON
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Interrupt Irq */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
unsigned char Irqn;
|
||||||
|
void *Periph;
|
||||||
void (*IrqCallback)(void *Param);
|
void (*IrqCallback)(void *Param);
|
||||||
}IRQ_MAP_T;
|
}IRQ_MAP_T;
|
||||||
|
|
||||||
#define IRQ_NUM 0xFF //中断数量
|
#define IRQ_NUM 67 //系统共有多少个中断
|
||||||
#define NVIC_GROUP_LEVEL NVIC_PriorityGroup_2 //中断组
|
#define NVIC_GROUP_LEVEL NVIC_PriorityGroup_2 //中断组
|
||||||
|
|
||||||
|
/* GPIO */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GPIO_TypeDef *GpioPort;
|
GPIO_TypeDef *GpioPort;
|
||||||
unsigned short GpioPin;
|
unsigned short GpioPin;
|
||||||
|
// unsigned char Irqn;
|
||||||
} GPIO_PERIPH_T;
|
} GPIO_PERIPH_T;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -28,6 +57,12 @@ typedef struct {
|
|||||||
GPIO_PERIPH_T Periph;
|
GPIO_PERIPH_T Periph;
|
||||||
} GPIO_MAP_T;
|
} GPIO_MAP_T;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GPIO_MAP_T GpioX;
|
||||||
|
GPIOMode_TypeDef Mode;
|
||||||
|
GPIOSpeed_TypeDef Speed;
|
||||||
|
}GPIO_CONFIG;
|
||||||
|
|
||||||
// ==================== GPIOA 组 ====================
|
// ==================== GPIOA 组 ====================
|
||||||
#ifdef GPIOA
|
#ifdef GPIOA
|
||||||
#define GPIO0 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_0}}
|
#define GPIO0 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOA, {GPIOA, GPIO_Pin_0}}
|
||||||
@@ -162,9 +197,12 @@ typedef struct {
|
|||||||
#define GPIO111 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_15}}
|
#define GPIO111 {RCC_APB2PeriphClockCmd, RCC_APB2Periph_GPIOG, {GPIOG, GPIO_Pin_15}}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define GPIO_NULL {0, 0, {0, 0}}
|
||||||
|
|
||||||
|
/* COM */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
USART_TypeDef *UartId;
|
USART_TypeDef *UartId;
|
||||||
unsigned int Irqn;
|
unsigned char Irqn;
|
||||||
} COM_PERIPH_T;
|
} COM_PERIPH_T;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -173,6 +211,14 @@ typedef struct {
|
|||||||
COM_PERIPH_T Periph;
|
COM_PERIPH_T Periph;
|
||||||
} COM_MAP_T;
|
} COM_MAP_T;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
COM_MAP_T *ComX; //串口外设
|
||||||
|
GPIO_MAP_T TxPort; //发送端口
|
||||||
|
GPIO_MAP_T RxPort; //接收端口
|
||||||
|
GPIO_MAP_T TxRxEn; //收发使能
|
||||||
|
}COM_CONFIG;
|
||||||
|
|
||||||
|
#define COM_NUM 5
|
||||||
#ifdef USART1
|
#ifdef USART1
|
||||||
#define COM0 (&(COM_MAP_T){RCC_APB2PeriphClockCmd, RCC_APB2Periph_USART1, {USART1,USART1_IRQn}})
|
#define COM0 (&(COM_MAP_T){RCC_APB2PeriphClockCmd, RCC_APB2Periph_USART1, {USART1,USART1_IRQn}})
|
||||||
#endif
|
#endif
|
||||||
@@ -187,4 +233,4 @@ typedef struct {
|
|||||||
#endif
|
#endif
|
||||||
#define COM4 (&(COM_MAP_T){RCC_APB1PeriphClockCmd, RCC_APB1Periph_UART5,{UART5,UART5_IRQn}})
|
#define COM4 (&(COM_MAP_T){RCC_APB1PeriphClockCmd, RCC_APB1Periph_UART5,{UART5,UART5_IRQn}})
|
||||||
|
|
||||||
#endif //VOILETTYPEDEF_H
|
#endif //_VOILET_PORT_H
|
||||||
+175
-140
@@ -1,151 +1,186 @@
|
|||||||
#include "Bsp.h"
|
#include "Bsp.h"
|
||||||
|
|
||||||
//
|
#ifdef TTY_COM
|
||||||
// #ifdef USE_DIGITAL_OUTPUT
|
#include "LetterShell.h"
|
||||||
// GPIO_ST DigiTalOutPut[DO_NUM] =
|
#endif
|
||||||
// {
|
|
||||||
// GPIOB,GPIO_Pin_8,RESET,
|
// LED灯数组
|
||||||
// };
|
#if (LED_NUM != 0)
|
||||||
// #endif
|
const GPIO_CONFIG LED_PERIPH[] = {
|
||||||
//
|
{.GpioX = GPIO21, .Mode = GPIO_Mode_Out_PP, .Speed = GPIO_Speed_10MHz},
|
||||||
// #ifdef USE_DIGITAL_INPUT
|
{.GpioX = GPIO69, .Mode = GPIO_Mode_Out_PP, .Speed = GPIO_Speed_10MHz},
|
||||||
// GPIO_ST DigiTalInPut[DI_NUM] =
|
};
|
||||||
// {
|
#endif
|
||||||
// GPIOF,GPIO_Pin_8,SET,
|
//数字输入数组
|
||||||
// GPIOE,GPIO_Pin_4,SET,
|
#if (DI_NUM != 0)
|
||||||
// GPIOE,GPIO_Pin_3,SET,
|
const GPIO_CONFIG DI_PERIPH[] = {
|
||||||
// };
|
{},
|
||||||
// #endif
|
};
|
||||||
//
|
#endif
|
||||||
// //LED灯数组
|
//数字输出数组
|
||||||
// #ifdef USE_LED
|
#if (DO_NUM != 0)
|
||||||
// GPIO_ST DigiTalLed[LED_NUM] =
|
const GPIO_CONFIG DO_PERIPH[] = {
|
||||||
// {
|
{},
|
||||||
// GPIOB,GPIO_Pin_5,SET,
|
};
|
||||||
// GPIOE,GPIO_Pin_5,SET,
|
#endif
|
||||||
// };
|
//串口配置表
|
||||||
// #endif
|
const COM_CONFIG COM_PERIPH[] = {
|
||||||
//
|
{COM0,.TxPort = GPIO9, .RxPort =GPIO10},
|
||||||
// /**
|
{COM1,.TxPort = GPIO2, .RxPort = GPIO3,.TxRxEn = GPIO55},
|
||||||
// * @brief BSP的配置和初始化
|
};
|
||||||
// * @param void
|
|
||||||
// * @retval void
|
void BspExtraInit(void);
|
||||||
// * @note void
|
|
||||||
// * @example void
|
/**
|
||||||
// */
|
* @brief Voilet BSP的初始化函数
|
||||||
// void BspInit(void)
|
* @note void
|
||||||
// {
|
* @param void
|
||||||
// //关闭所有系统中断
|
* @retval void
|
||||||
// INTERRUPT_DISABLE
|
*/
|
||||||
//
|
void BspInit(void) {
|
||||||
// //System Delay
|
unsigned char i = 0;
|
||||||
// SystemDelayConfig();
|
|
||||||
//
|
INTERRUPT_DISABLE
|
||||||
// //Interrupt
|
|
||||||
// SystemInterruptInit();
|
//初始化中断系统
|
||||||
//
|
IrqInit();
|
||||||
// //Gpio
|
|
||||||
// SystemGpioInit();
|
//初始化延时库
|
||||||
//
|
DelayConfig();
|
||||||
// {
|
|
||||||
// //DO
|
//LED灯配置
|
||||||
// #ifdef USE_DIGITAL_OUTPUT
|
#if (LED_NUM != 0)
|
||||||
// for (uint8_t i = 0; i < DO_NUM; i++) {
|
for (i = 0;i < ARRAY_LEN(LED_PERIPH);i++) {
|
||||||
// GpioConfig(DigiTalOutPut[i].GpioPort,DigiTalOutPut[i].GpioPin,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
|
//配置GPIO口
|
||||||
// GpioSetSts(DigiTalOutPut[i].GpioPort,DigiTalOutPut[i].GpioPin,DigiTalOutPut[i].DefaultStatus);
|
GpioConfig(&LED_PERIPH[i].GpioX, LED_PERIPH[i].Mode, LED_PERIPH[i].Speed);
|
||||||
// }
|
}
|
||||||
// #endif
|
#endif
|
||||||
// //DI
|
|
||||||
// #ifdef USE_DIGITAL_INPUT
|
//DI采集配置
|
||||||
// for (uint8_t i = 0; i < DI_NUM; i++) {
|
#if (DI_NUM != 0)
|
||||||
// GpioConfig(DigiTalInPut[i].GpioPort,DigiTalInPut[i].GpioPin,GPIO_Mode_IPU,GPIO_Speed_50MHz);
|
// for (i = 0;i < DI_NUM;i++) {
|
||||||
// }
|
// //打开外设时钟
|
||||||
// #endif
|
// GpioClockEnable(&LED_PERIPH[i].GpioX);
|
||||||
// //LED
|
// //配置GPIO口
|
||||||
// #ifdef USE_LED
|
// GpioConfig(&LED_PERIPH[i].GpioX, LED_PERIPH[i].Mode, LED_PERIPH[i].Speed);
|
||||||
// for (uint8_t i = 0; i < LED_NUM; i++) {
|
// }
|
||||||
// GpioConfig(DigiTalLed[i].GpioPort,DigiTalLed[i].GpioPin,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
|
#endif
|
||||||
// GpioSetSts(DigiTalLed[i].GpioPort,DigiTalLed[i].GpioPin,DigiTalLed[i].DefaultStatus);
|
|
||||||
// }
|
//DO输出配置
|
||||||
// #endif
|
#if (DO_NUM != 0)
|
||||||
// }
|
// for (i = 0;i < DO_NUM;i++) {
|
||||||
//
|
// //打开外设时钟
|
||||||
// //Usart
|
// GpioClockEnable(&LED_PERIPH[i].GpioX);
|
||||||
// SystemUsartInit();
|
// //配置GPIO口
|
||||||
//
|
// GpioConfig(&LED_PERIPH[i].GpioX, LED_PERIPH[i].Mode, LED_PERIPH[i].Speed);
|
||||||
// {
|
// }
|
||||||
// //串口的TX引脚需要复用推挽模式,RX引脚需要浮空输入模式
|
#endif
|
||||||
// #ifdef USE_USART1
|
|
||||||
// GpioConfig(COM0_TX_PORT,COM0_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
//串口配置
|
||||||
// GpioConfig(COM0_RX_PORT,COM0_RX_PIN,GPIO_Mode_IPU,GPIO_Speed_50MHz);
|
for (i = 0;i < ARRAY_LEN(COM_PERIPH);i++) {
|
||||||
// #endif
|
GpioConfig(&COM_PERIPH[i].TxPort, GPIO_Mode_AF_PP, GPIO_Speed_2MHz);
|
||||||
// #ifdef USE_USART2
|
GpioConfig(&COM_PERIPH[i].RxPort, GPIO_Mode_IPU, GPIO_Speed_2MHz);
|
||||||
// GpioConfig(COM1_TX_PORT,COM1_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
}
|
||||||
// GpioConfig(COM1_RX_PORT,COM1_RX_PIN,GPIO_Mode_IPU,GPIO_Speed_50MHz);
|
|
||||||
// #endif
|
INTERRUPT_ENABLE
|
||||||
// #ifdef USE_USART3
|
|
||||||
// GpioConfig(COM2_TX_PORT,COM2_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
BspExtraInit();
|
||||||
// GpioConfig(COM2_RX_PORT,COM2_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
}
|
||||||
// #endif
|
|
||||||
// #ifdef USE_USART4
|
/**
|
||||||
// GpioConfig(COM3_TX_PORT,COM3_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
* @brief 扩展库初始化
|
||||||
// GpioConfig(COM3_RX_PORT,COM3_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
* @note 理论上扩展库要在BSP的最后加载
|
||||||
// #endif
|
* @param void
|
||||||
// #ifdef USE_USART5
|
* @retval void
|
||||||
// GpioConfig(COM4_TX_PORT,COM4_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
*/
|
||||||
// GpioConfig(COM4_RX_PORT,COM4_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
|
void BspExtraInit(void)
|
||||||
// #endif
|
{
|
||||||
// }
|
//LetterShell初始化
|
||||||
//
|
#ifdef TTY_COM
|
||||||
// #ifdef EXTRA_BSP
|
LetterShellInit(TTY_COM,TTY_BAUD);
|
||||||
// BspExtraInit();
|
#endif
|
||||||
// #endif
|
}
|
||||||
// }
|
|
||||||
//
|
/**
|
||||||
// void SystemStart(void)
|
* @brief 打开LED灯
|
||||||
// {
|
* @note void
|
||||||
// //开启系统中断
|
* @param Chnl 通道
|
||||||
// INTERRUPT_ENABLE
|
* @retval void
|
||||||
//
|
*/
|
||||||
// #ifdef USE_RTOS
|
void LedOn(uint8_t Chnl)
|
||||||
// #ifdef USE_FREERTOS
|
{
|
||||||
// #endif
|
if (Chnl >= LED_NUM)
|
||||||
// #ifdef USE_UCOS
|
return;
|
||||||
// #endif
|
GpioSet(&LED_PERIPH[Chnl].GpioX, RESET);
|
||||||
// #ifdef USE_THREADX
|
}
|
||||||
// #endif
|
/**
|
||||||
// #endif
|
* @brief 关闭LED灯
|
||||||
// }
|
* @note void
|
||||||
//
|
* @param Chnl 通道
|
||||||
// /**
|
* @retval void
|
||||||
// * @brief 扩展库初始化
|
*/
|
||||||
// * @param void
|
void LedOff(uint8_t Chnl)
|
||||||
// * @retval void
|
{
|
||||||
// * @note 理论上扩展库要在BSP的最后加载
|
if (Chnl >= LED_NUM)
|
||||||
// * @example void
|
return;
|
||||||
// */
|
GpioSet(&LED_PERIPH[Chnl].GpioX, SET);
|
||||||
// void BspExtraInit(void)
|
}
|
||||||
// {
|
|
||||||
// //LetterShell初始化
|
void LedSet(uint8_t Chnl,uint8_t Value)
|
||||||
// #ifdef USE_SHELL
|
{
|
||||||
// LetterShellInit(TTY_COM,TTY_BAUD);
|
if (Chnl >= LED_NUM)
|
||||||
// #endif
|
return;
|
||||||
// }
|
if (Value == LED_ON) {
|
||||||
//
|
GpioSet(&LED_PERIPH[Chnl].GpioX, RESET);
|
||||||
// //用户层接口
|
}
|
||||||
// void BspSystemReboot(void)
|
else {
|
||||||
// {
|
GpioSet(&LED_PERIPH[Chnl].GpioX, SET);
|
||||||
// INTERRUPT_DISABLE
|
}
|
||||||
// NVIC_SystemReset(); // 执行软件复位
|
}
|
||||||
// }
|
|
||||||
|
/**
|
||||||
|
* @brief 切换LED灯状态
|
||||||
|
* @note void
|
||||||
|
* @param Chnl 通道 Status 状态
|
||||||
|
* @retval void
|
||||||
|
*/
|
||||||
|
void LedToggle(uint8_t Chnl)
|
||||||
|
{
|
||||||
|
if (Chnl >= LED_NUM)
|
||||||
|
return;
|
||||||
|
if (GpioGet(&LED_PERIPH[Chnl].GpioX) == LED_ON)
|
||||||
|
{
|
||||||
|
GpioSet(&LED_PERIPH[Chnl].GpioX,LED_OFF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GpioSet(&LED_PERIPH[Chnl].GpioX,LED_ON);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Rs485StdConfig(const COM_MAP_T *ComX,unsigned int Baud)
|
||||||
|
{
|
||||||
|
for (unsigned char i = 0;i < ARRAY_LEN(COM_PERIPH);i++) {
|
||||||
|
if (ComX == COM_PERIPH[i].ComX) {
|
||||||
|
if (COM_PERIPH[i].TxRxEn.ClockTree) {
|
||||||
|
GpioSet(&COM_PERIPH[i].TxRxEn,Baud);
|
||||||
|
}
|
||||||
|
ComStdConfig(COM_PERIPH[i].ComX,Baud);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Rs485AdvConfig(const COM_MAP_T *ComX, uint32_t Baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 重写Printf函数
|
* @brief 重写Printf函数
|
||||||
* @note void
|
* @note void
|
||||||
* @param void
|
* @param void
|
||||||
* @retval void
|
* @retval void
|
||||||
*/
|
*/
|
||||||
// ||
|
|
||||||
// #include <SysCall.c>
|
|
||||||
#if defined(__CC_ARM) || defined(__CLANG_ARM)
|
#if defined(__CC_ARM) || defined(__CLANG_ARM)
|
||||||
int fputc(int ch, FILE *f)
|
int fputc(int ch, FILE *f)
|
||||||
{
|
{
|
||||||
|
|||||||
+15
-16
@@ -1,8 +1,8 @@
|
|||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
#include "Bsp.h"
|
#include "Bsp.h"
|
||||||
|
|
||||||
#define IRQ_NULL ((void *)0)
|
IRQ_MAP_T IRQ_PERIPH[IRQ_NUM];
|
||||||
|
|
||||||
IRQ_MAP_T IRQ_PERIPH[IRQ_NUM] = {0x00};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 中断回调函数初始化为空
|
* @brief 中断回调函数初始化为空
|
||||||
@@ -15,19 +15,18 @@ void IrqInit(void)
|
|||||||
//设定系统中断组
|
//设定系统中断组
|
||||||
NVIC_PriorityGroupConfig(NVIC_GROUP_LEVEL);
|
NVIC_PriorityGroupConfig(NVIC_GROUP_LEVEL);
|
||||||
for (uint8_t i = 0; i < IRQ_NUM; i++) {
|
for (uint8_t i = 0; i < IRQ_NUM; i++) {
|
||||||
IRQ_PERIPH[i].IrqCallback = IRQ_NULL;
|
IRQ_PERIPH[i].IrqCallback = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 中断回调函数注册
|
* @brief 中断回调函数注册
|
||||||
* @note 将外部传入的函数地址关联到INTERRUPT_ST表中
|
* @note 将外部传入的函数地址关联到INTERRUPT_ST表中
|
||||||
* @param Vector:中断号 void(*Func)(uint32_t):回调函数
|
* @param Vector:中断号 void(*Func)(uint32_t):回调函数
|
||||||
* @retval void
|
* @retval void
|
||||||
*/
|
*/
|
||||||
void IrqRegister(unsigned int Irq, void(*Func)(void *Param))
|
void IrqRegister(unsigned char Irqn,void(*Func)(void *Param)) {
|
||||||
{
|
IRQ_PERIPH[Irqn].Irqn = Irqn;
|
||||||
IRQ_PERIPH[Irq].IrqCallback = Func;
|
IRQ_PERIPH[Irqn].IrqCallback = Func;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,7 +35,7 @@ void IrqRegister(unsigned int Irq, void(*Func)(void *Param))
|
|||||||
* @param Vector:中断号 NvicPrePriority:主优先级 NvicSubPriority:抢占优先级
|
* @param Vector:中断号 NvicPrePriority:主优先级 NvicSubPriority:抢占优先级
|
||||||
* @retval void
|
* @retval void
|
||||||
*/
|
*/
|
||||||
void IrqConfig(uint32_t Irq, uint8_t NvicPrePriority, uint8_t NvicSubPriority)
|
void IrqEnable(uint32_t Irq, uint8_t NvicPrePriority, uint8_t NvicSubPriority)
|
||||||
{
|
{
|
||||||
NVIC_InitTypeDef NVIC_InitStructure;
|
NVIC_InitTypeDef NVIC_InitStructure;
|
||||||
|
|
||||||
@@ -59,17 +58,17 @@ void IrqDisable(uint32_t Irq)
|
|||||||
NVIC_InitStructure.NVIC_IRQChannel = Irq;
|
NVIC_InitStructure.NVIC_IRQChannel = Irq;
|
||||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
||||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
|
||||||
NVIC_Init(&NVIC_InitStructure);
|
NVIC_Init(&NVIC_InitStructure);
|
||||||
}
|
}
|
||||||
|
|
||||||
void USART1_IRQHandler(void)
|
void USART1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
|
if (IRQ_PERIPH[COM0->Periph.Irqn].IrqCallback != NULL) {
|
||||||
if (USART_GetFlagStatus(COM0->Periph.UartId, USART_FLAG_ORE) == SET)
|
if (USART_GetFlagStatus(COM0->Periph.UartId, USART_FLAG_ORE) == SET)
|
||||||
{
|
{
|
||||||
USART_ClearFlag(COM0->Periph.UartId, USART_FLAG_ORE);
|
USART_ClearFlag(COM0->Periph.UartId, USART_FLAG_ORE);
|
||||||
}
|
}
|
||||||
if (IRQ_PERIPH[COM0->Periph.Irqn].IrqCallback != IRQ_NULL) {
|
|
||||||
IRQ_PERIPH[COM0->Periph.Irqn].IrqCallback(COM0);
|
IRQ_PERIPH[COM0->Periph.Irqn].IrqCallback(COM0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,7 +79,7 @@ void USART2_IRQHandler(void)
|
|||||||
{
|
{
|
||||||
USART_ClearFlag(COM1->Periph.UartId, USART_FLAG_ORE);
|
USART_ClearFlag(COM1->Periph.UartId, USART_FLAG_ORE);
|
||||||
}
|
}
|
||||||
if (IRQ_PERIPH[COM1->Periph.Irqn].IrqCallback != IRQ_NULL) {
|
if (IRQ_PERIPH[COM1->Periph.Irqn].IrqCallback != NULL) {
|
||||||
IRQ_PERIPH[COM1->Periph.Irqn].IrqCallback(COM1);
|
IRQ_PERIPH[COM1->Periph.Irqn].IrqCallback(COM1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,8 +90,8 @@ void USART3_IRQHandler(void)
|
|||||||
{
|
{
|
||||||
USART_ClearFlag(COM2->Periph.UartId, USART_FLAG_ORE);
|
USART_ClearFlag(COM2->Periph.UartId, USART_FLAG_ORE);
|
||||||
}
|
}
|
||||||
if (IRQ_PERIPH[COM2->Periph.Irqn].IrqCallback != IRQ_NULL) {
|
if (IRQ_PERIPH[COM2->Periph.Irqn].IrqCallback != NULL) {
|
||||||
IRQ_PERIPH[COM2->Periph.Irqn].IrqCallback(COM1);
|
IRQ_PERIPH[COM2->Periph.Irqn].IrqCallback(COM2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +102,7 @@ void USART4_IRQHandler(void)
|
|||||||
{
|
{
|
||||||
USART_ClearFlag(COM3->Periph.UartId, USART_FLAG_ORE);
|
USART_ClearFlag(COM3->Periph.UartId, USART_FLAG_ORE);
|
||||||
}
|
}
|
||||||
if (IRQ_PERIPH[COM3->Periph.Irqn].IrqCallback != IRQ_NULL) {
|
if (IRQ_PERIPH[COM3->Periph.Irqn].IrqCallback != NULL) {
|
||||||
IRQ_PERIPH[COM3->Periph.Irqn].IrqCallback(COM3);
|
IRQ_PERIPH[COM3->Periph.Irqn].IrqCallback(COM3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -114,7 +113,7 @@ void USART5_IRQHandler(void)
|
|||||||
{
|
{
|
||||||
USART_ClearFlag(COM4->Periph.UartId, USART_FLAG_ORE);
|
USART_ClearFlag(COM4->Periph.UartId, USART_FLAG_ORE);
|
||||||
}
|
}
|
||||||
if (IRQ_PERIPH[COM4->Periph.Irqn].IrqCallback != IRQ_NULL) {
|
if (IRQ_PERIPH[COM4->Periph.Irqn].IrqCallback != NULL) {
|
||||||
IRQ_PERIPH[COM4->Periph.Irqn].IrqCallback(COM4);
|
IRQ_PERIPH[COM4->Periph.Irqn].IrqCallback(COM4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
#include "LetterShell.h"
|
|
||||||
#include "shell.h"
|
|
||||||
/* 板级BSP头文件 */
|
|
||||||
#include "Bsp.h"
|
|
||||||
#include "Voilet.h"
|
|
||||||
|
|
||||||
#define WR_BUFFER_SIZE 512
|
|
||||||
|
|
||||||
/* 1. 创建shell对象,开辟shell缓冲区 */
|
|
||||||
Shell Host; //Shell实例化
|
|
||||||
char HostBuffer[WR_BUFFER_SIZE]; //读写缓冲区
|
|
||||||
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 打印版本号
|
|
||||||
// * @param void
|
|
||||||
// * @retval void
|
|
||||||
// * @note void
|
|
||||||
// * @example void
|
|
||||||
// */
|
|
||||||
// void version(void)
|
|
||||||
// {
|
|
||||||
// printf("%s,%s\r\n",HARDWARE_VERSION,SOFTWARE_VERSION);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * @brief 重启单片机
|
|
||||||
// * @param void
|
|
||||||
// * @retval void
|
|
||||||
// * @note void
|
|
||||||
// * @example void
|
|
||||||
// */
|
|
||||||
// void reboot(void)
|
|
||||||
// {
|
|
||||||
// SystemReboot();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * @brief 串口测试程序
|
|
||||||
// * @param void
|
|
||||||
// * @retval void
|
|
||||||
// * @note void
|
|
||||||
// * @example void
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
// void comTest(uint8_t ComId)
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //打印版本号
|
|
||||||
// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), version, version, version);
|
|
||||||
// //软重启单片机
|
|
||||||
// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), reboot, reboot, reboot);
|
|
||||||
// //串口测试
|
|
||||||
// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), comTest, comTest, comTest);
|
|
||||||
@@ -16,7 +16,7 @@ Purpose : Implementation of low-level functions for I/O with the
|
|||||||
*
|
*
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
*/
|
*/
|
||||||
#ifdef defined (__SEGGER__)
|
#if defined (__SEGGER__)
|
||||||
#include "__SEGGER_RTL_Int.h"
|
#include "__SEGGER_RTL_Int.h"
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "Bsp.h"
|
#include "Bsp.h"
|
||||||
|
|||||||
+3
-4
@@ -20,7 +20,7 @@
|
|||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
#ifdef defined (__GNUC__)
|
#if defined (__GNUC__)
|
||||||
/* Includes */
|
/* Includes */
|
||||||
#include "Bsp.h"
|
#include "Bsp.h"
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ __attribute__((weak)) int _write(int file, char *ptr, int len)
|
|||||||
*/
|
*/
|
||||||
PUTCHAR_PROTOTYPE
|
PUTCHAR_PROTOTYPE
|
||||||
{
|
{
|
||||||
UsartSendChar(TTY_COM, ch); //阻塞式无限等待
|
ComSendChar(TTY_COM, ch); //阻塞式无限等待
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,8 +83,7 @@ PUTCHAR_PROTOTYPE
|
|||||||
GETCHAR_PROTOTYPE
|
GETCHAR_PROTOTYPE
|
||||||
{
|
{
|
||||||
uint8_t ch = 0;
|
uint8_t ch = 0;
|
||||||
ch = UsartReceiveChar(TTY_COM);
|
ch = ComReceiveChar(TTY_COM);
|
||||||
|
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "Bsp.h"
|
#include "Bsp.h"
|
||||||
|
|
||||||
|
extern const COM_CONFIG COM_PERIPH[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 初始化UART口外设的时钟
|
* @brief 初始化UART口外设的时钟
|
||||||
* @note void
|
* @note void
|
||||||
@@ -92,3 +94,7 @@ void ComAdvConfig(const COM_MAP_T *ComX, uint32_t Baud, uint8_t DataBits, uint8_
|
|||||||
{
|
{
|
||||||
ComInit(ComX, Baud, DataBits, StopBits, Parity);
|
ComInit(ComX, Baud, DataBits, StopBits, Parity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int CalcBaudTransIoSpeed(unsigned int Baud) {
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user