[AT32F421] 位操作文件sys.h?

[复制链接]
 楼主| 457878 发表于 2020-12-25 16:30 | 显示全部楼层 |阅读模式
本帖最后由 457878 于 2020-12-25 16:31 编辑

有没有像正点原子那样的sys.h,这样就方便位操作了

  1. #ifndef __SYS_H
  2. #define __SYS_H
  3. //*********************************************************************************************************
  4. #include "hal_board.h"
  5. //*********************************************************************************************************
  6. #define SYSTEM_SUPPORT_UCOS                0                //定义系统文件夹是否支持UCOS
  7. #define BITBAND(addr, bitnum) ((addr & 0x8000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
  8. #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
  9. #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
  10. //IO口地址映射
  11. #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
  12. #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
  13. #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
  14. #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
  15. #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
  16. #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C
  17. #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C

  18. #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
  19. #define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
  20. #define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
  21. #define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
  22. #define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
  23. #define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
  24. #define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08

  25. //IO口操作,只对单一的IO口!
  26. //确保n的值小于16!
  27. #define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出
  28. #define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入

  29. #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出
  30. #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入

  31. #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出
  32. #define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入

  33. #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出
  34. #define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入

  35. #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出
  36. #define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入

  37. #define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出
  38. #define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入

  39. #define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出
  40. #define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入
  41. /////////////////////////////////////////////////////////////////
  42. //Ex_NVIC_Config专用定义
  43. #define GPIO_A 0
  44. #define GPIO_B 1
  45. #define GPIO_C 2
  46. #define GPIO_D 3
  47. #define GPIO_E 4
  48. #define GPIO_F 5
  49. #define GPIO_G 6
  50. //*********************************************************************************************************
  51. #define FTIR   1  //下降沿触发
  52. #define RTIR   2  //上升沿触发


  53. //JTAG模式设置定义
  54. #define JTAG_SWD_DISABLE   0X02
  55. #define SWD_ENABLE         0X01
  56. #define JTAG_SWD_ENABLE    0X00

  57. /////////////////////////////////////////////////////////////////
  58. void Stm32_Clock_Init(u8 PLL);  //时钟初始化
  59. void Sys_Soft_Reset(void);      //系统软复位
  60. void Sys_Standby(void);         //待机模式
  61. void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset);//设置偏移地址
  62. void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group);//设置NVIC分组
  63. void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group);//设置中断
  64. void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM);//外部中断配置函数(只对GPIOA~G)
  65. void JTAG_Set(u8 mode);
  66. //////////////////////////////////////////////////////////////////////////////
  67. //以下为汇编函数
  68. void WFI_SET(void);                //执行WFI指令
  69. void INTX_DISABLE(void);//关闭所有中断
  70. void INTX_ENABLE(void);        //开启所有中断
  71. void MSR_MSP(u32 addr);        //设置堆栈地址
  72. //*********************************************************************************************************
  73. #endif













muyichuan2012 发表于 2020-12-25 16:39 | 显示全部楼层
AT32F421和St030一样,由于GPIO的地址区间不在bitband范围内,因此不支持bitband操作。
hli0305 发表于 2020-12-26 10:44 | 显示全部楼层
211385fe6a37358bd3.png
好像是可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

270

主题

885

帖子

3

粉丝
快速回复 返回顶部 返回列表