本帖最后由 457878 于 2020-12-25 16:31 编辑  
 
有没有像正点原子那样的sys.h,这样就方便位操作了   
 
- #ifndef __SYS_H
 
 - #define __SYS_H
 
 - //*********************************************************************************************************
 
 - #include "hal_board.h"
 
 - //*********************************************************************************************************
 
 - #define SYSTEM_SUPPORT_UCOS                0                //定义系统文件夹是否支持UCOS
 
 - #define BITBAND(addr, bitnum) ((addr & 0x8000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
 
 - #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
 
 - #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
 
 - //IO口地址映射
 
 - #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
 
 - #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
 
 - #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
 
 - #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
 
 - #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
 
 - #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C
 
 - #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C
 
  
- #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
 
 - #define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
 
 - #define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
 
 - #define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
 
 - #define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
 
 - #define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
 
 - #define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08
 
  
- //IO口操作,只对单一的IO口!
 
 - //确保n的值小于16!
 
 - #define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出
 
 - #define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入
 
  
- #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出
 
 - #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入
 
  
- #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出
 
 - #define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入
 
  
- #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出
 
 - #define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入
 
  
- #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出
 
 - #define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入
 
  
- #define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出
 
 - #define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入
 
  
- #define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出
 
 - #define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入
 
 - /////////////////////////////////////////////////////////////////
 
 - //Ex_NVIC_Config专用定义
 
 - #define GPIO_A 0
 
 - #define GPIO_B 1
 
 - #define GPIO_C 2
 
 - #define GPIO_D 3
 
 - #define GPIO_E 4
 
 - #define GPIO_F 5
 
 - #define GPIO_G 6
 
 - //*********************************************************************************************************
 
 - #define FTIR   1  //下降沿触发
 
 - #define RTIR   2  //上升沿触发
 
  
 
- //JTAG模式设置定义
 
 - #define JTAG_SWD_DISABLE   0X02
 
 - #define SWD_ENABLE         0X01
 
 - #define JTAG_SWD_ENABLE    0X00
 
  
- /////////////////////////////////////////////////////////////////
 
 - void Stm32_Clock_Init(u8 PLL);  //时钟初始化
 
 - void Sys_Soft_Reset(void);      //系统软复位
 
 - void Sys_Standby(void);         //待机模式
 
 - void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset);//设置偏移地址
 
 - void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group);//设置NVIC分组
 
 - void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group);//设置中断
 
 - void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM);//外部中断配置函数(只对GPIOA~G)
 
 - void JTAG_Set(u8 mode);
 
 - //////////////////////////////////////////////////////////////////////////////
 
 - //以下为汇编函数
 
 - void WFI_SET(void);                //执行WFI指令
 
 - void INTX_DISABLE(void);//关闭所有中断
 
 - void INTX_ENABLE(void);        //开启所有中断
 
 - void MSR_MSP(u32 addr);        //设置堆栈地址
 
 - //*********************************************************************************************************
 
 - #endif
 
  
 
 
 
 
 
 
 
 
 
 
  
 
  |