目录

  • GPIO 控制器
  • 库函数
    • 函数
    • 参数
  • 极限翻转速度
    • 寄存器操作
    • 库函数操作
  • 测试
    • main.c
    • wm_it.c

Windows 10 20H2
HLK-W806-V1.0-KIT
WM_SDK_W806_v0.6.0


GPIO 控制器

摘自《W806 芯片设计指导书 V1.0》
       可配置的 GPIO、软件控制的输入输出、硬件控制的输入输出、可配置中断方式。
       GPIOA 和 GPIOB 寄存器起始地址不同,但是功能一致。
       芯片上电后 7,8 脚默认为 UART0 端口,该端口提供下载及 AT 指令端口以及 log 输出端口。用户使用时候注意不要随意使用该端口作为 GPIO 使用,防止被占用无法下载及调试。在系统起来后,该端口可以复用为其它端口使用。

       所有 GPIO 如果芯片内部配置为上拉,典型上拉电阻值为 40K,如果配置为下拉,典型下拉电阻值为 49K。


库函数

函数

打开wm_gpio.h,有如下的函数声明:

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
//初始化我们需要用到的引脚的工作模式void HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);
//将初始化之后的引脚恢复成默认的状态–各个寄存器复位时的值GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
//读取我们想要知道的引脚的电平状态void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin, GPIO_PinState PinState);
//给某个引脚写0或1void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
//翻转某个引脚的电平状态void HAL_GPIO_EXTI_IRQHandler(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
//外部中断服务函数,用来响应外部中断的触发。函数实体里面有两个功能,一是清除中断标记位,二是调用下面的回调函数。void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
//中断回调函数,可以理解为中断函数具体要响应的动作。

参数

结构体

typedef struct
{uint32_t Pin;uint32_t Mode;uint32_t Pull;
} GPIO_InitTypeDef;typedef enum
{GPIO_PIN_RESET = 0,GPIO_PIN_SET
} GPIO_PinState;

GPIO_TypeDef

#define GPIOA    ((GPIO_TypeDef *)GPIOA_BASE)
#define GPIOB   ((GPIO_TypeDef *)GPIOB_BASE)

GPIO_InitTypeDef.Pin

#define GPIO_PIN_0   ((uint32_t)0x00000001)
#define GPIO_PIN_1  ((uint32_t)0x00000002)
#define GPIO_PIN_2  ((uint32_t)0x00000004)
#define GPIO_PIN_3  ((uint32_t)0x00000008)
#define GPIO_PIN_4  ((uint32_t)0x00000010)
#define GPIO_PIN_5  ((uint32_t)0x00000020)
#define GPIO_PIN_6  ((uint32_t)0x00000040)
#define GPIO_PIN_7  ((uint32_t)0x00000080)
#define GPIO_PIN_8  ((uint32_t)0x00000100)
#define GPIO_PIN_9  ((uint32_t)0x00000200)
#define GPIO_PIN_10 ((uint32_t)0x00000400)
#define GPIO_PIN_11 ((uint32_t)0x00000800)
#define GPIO_PIN_12 ((uint32_t)0x00001000)
#define GPIO_PIN_13 ((uint32_t)0x00002000)
#define GPIO_PIN_14 ((uint32_t)0x00004000)
#define GPIO_PIN_15 ((uint32_t)0x00008000)
#define GPIO_PIN_16 ((uint32_t)0x00010000)
#define GPIO_PIN_17 ((uint32_t)0x00020000)
#define GPIO_PIN_18 ((uint32_t)0x00040000)
#define GPIO_PIN_19 ((uint32_t)0x00080000)
#define GPIO_PIN_20 ((uint32_t)0x00100000)
#define GPIO_PIN_21 ((uint32_t)0x00200000)
#define GPIO_PIN_22 ((uint32_t)0x00400000)
#define GPIO_PIN_23 ((uint32_t)0x00800000)
#define GPIO_PIN_24 ((uint32_t)0x01000000)
#define GPIO_PIN_25 ((uint32_t)0x02000000)
#define GPIO_PIN_26 ((uint32_t)0x04000000)
#define GPIO_PIN_27 ((uint32_t)0x08000000)
#define GPIO_PIN_28 ((uint32_t)0x10000000)
#define GPIO_PIN_29 ((uint32_t)0x20000000)
#define GPIO_PIN_30 ((uint32_t)0x40000000)
#define GPIO_PIN_31 ((uint32_t)0x80000000)
#define GPIO_PIN_ALL    ((uint32_t)0xFFFFFFFF)#define GPIO_PIN_MASK 0xFFFFFFFF

GPIO_InitTypeDef.Mode

#define GPIO_MODE_INPUT                  0x01
#define GPIO_MODE_OUTPUT                0x02#define GPIO_MODE_IT_RISING             0x87
#define GPIO_MODE_IT_FALLING            0x88
#define GPIO_MODE_IT_RISING_FALLING     0x89
#define GPIO_MODE_IT_HIGH_LEVEL         0x8a
#define GPIO_MODE_IT_LOW_LEVEL          0x8b

GPIO_InitTypeDef.Pull

#define GPIO_NOPULL                      0x12
#define GPIO_PULLUP                     0x13
#define GPIO_PULLDOWN                   0x14

一般出现在assert_param断言语句中,用于对函数入口参数的有效性进行判断。

#define IS_GPIO_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOA) || \((INSTANCE) == GPIOB))#define IS_GPIO_AF_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))#define IS_GPIO_PIN(PIN)           (((((uint32_t)PIN) & GPIO_PIN_MASK ) != 0x00u) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00u))#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)              ||\((MODE) == GPIO_MODE_OUTPUT)             ||\((MODE) == GPIO_MODE_IT_RISING)          ||\((MODE) == GPIO_MODE_IT_FALLING)         ||\((MODE) == GPIO_MODE_IT_RISING_FALLING)  ||\

#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \((PULL) == GPIO_PULLDOWN))

wm_gpio_ex.h中的宏用于处理引脚复用:

#define __AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__) do{                             \SET_BIT(__HANDLE__->AF_SEL, __IOPOSITION__);   \CLEAR_BIT(__HANDLE__->AF_S1, __IOPOSITION__);   \CLEAR_BIT(__HANDLE__->AF_S0, __IOPOSITION__);   \}while (0)#define __AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__) do{                             \SET_BIT(__HANDLE__->AF_SEL, __IOPOSITION__);   \CLEAR_BIT(__HANDLE__->AF_S1, __IOPOSITION__);   \SET_BIT(__HANDLE__->AF_S0, __IOPOSITION__); \}while (0)#define __AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__) do{                             \SET_BIT(__HANDLE__->AF_SEL, __IOPOSITION__);   \SET_BIT(__HANDLE__->AF_S1, __IOPOSITION__); \CLEAR_BIT(__HANDLE__->AF_S0, __IOPOSITION__);   \}while (0)#define __AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__) do{                             \SET_BIT(__HANDLE__->AF_SEL, __IOPOSITION__);   \SET_BIT(__HANDLE__->AF_S1, __IOPOSITION__); \SET_BIT(__HANDLE__->AF_S0, __IOPOSITION__); \}while (0)#define __AFIO_REMAP_SET_OPT5(__HANDLE__, __IOPOSITION__) do{                             \CLEAR_BIT(__HANDLE__->AF_SEL, __IOPOSITION__); \}while (0)#define __AFIO_REMAP_SET_OPT6(__HANDLE__, __IOPOSITION__) do{                             \CLEAR_BIT(__HANDLE__->AF_SEL, __IOPOSITION__); \CLEAR_BIT(__HANDLE__->DIR, __IOPOSITION__); \SET_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__); \CLEAR_BIT(__HANDLE__->PULLDOWN_EN, __IOPOSITION__); \}while (0)#define __AFIO_REMAP_SET_OPT7(__HANDLE__, __IOPOSITION__) do{                                \CLEAR_BIT(__HANDLE__->AF_SEL, __IOPOSITION__);  \CLEAR_BIT(__HANDLE__->DIR, __IOPOSITION__); \SET_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__); \CLEAR_BIT(__HANDLE__->PULLDOWN_EN, __IOPOSITION__); \}while (0)#define __HAL_AFIO_REMAP_SPI_CLK(__HANDLE__, __IOPOSITION__) do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_1))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_2))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_15)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_24)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)                                             #define __HAL_AFIO_REMAP_SPI_CS(__HANDLE__, __IOPOSITION__) do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_0))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_4))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_14)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_23)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0) #define __HAL_AFIO_REMAP_SPI_MISO(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_0))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_3))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_16)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_25)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0) #define __HAL_AFIO_REMAP_SPI_MOSI(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_7))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_5))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_17)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_26)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)                                                 #define __HAL_AFIO_REMAP_UART0_TX(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_19))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_27)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART0_RX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_20))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_28)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \CLEAR_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__);   \}while (0)#define __HAL_AFIO_REMAP_UART0_RTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_21))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_29)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART0_CTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_22))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_30)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART1_TX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_6))   \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_31)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART1_RX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_7))   \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_16)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \CLEAR_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__);   \}while (0)#define __HAL_AFIO_REMAP_UART1_RTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_19))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_2))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART1_CTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_20))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_3))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART2_TX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_2))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_2))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART2_RX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_3))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_3))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \CLEAR_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__);   \}while (0)#define __HAL_AFIO_REMAP_UART2_RTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_4))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_5))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART2_CTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_5))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_6))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART3_TX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_0))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_5))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART3_RX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_1))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_6))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \CLEAR_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__);   \}while (0)#define __HAL_AFIO_REMAP_UART3_RTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_2))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART3_CTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_3))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART4_TX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_4))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_8))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART4_RX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_5))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_9))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \CLEAR_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__);   \}while (0)#define __HAL_AFIO_REMAP_UART4_RTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_5))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_10)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART4_CTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_6))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_11)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)
#define __HAL_AFIO_REMAP_UART5_TX(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_12))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_08)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_18)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART5_RX(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_13))  \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_9))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_17)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \CLEAR_BIT(__HANDLE__->PULLUP_EN, __IOPOSITION__);   \}while (0)#define __HAL_AFIO_REMAP_UART5_RTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_12))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_14)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_UART5_CTS(__HANDLE__, __IOPOSITION__)   do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_13))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_15)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_ADC(__HANDLE__, __IOPOSITION__) do{                             \if ((__HANDLE__ == GPIOA) &&         \((__IOPOSITION__ == GPIO_PIN_1) || (__IOPOSITION__ == GPIO_PIN_2) || \(__IOPOSITION__ == GPIO_PIN_3) || (__IOPOSITION__ == GPIO_PIN_4)))   \{                                                  \__AFIO_REMAP_SET_OPT6(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_PWM0(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_0))   \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_19)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_12)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_2))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_10)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_PWM1(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_1))   \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_20)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_3))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_11)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_13)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_PWM2(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_0))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_2))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_12)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_14)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_24)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_PWM3(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_1))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_3))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_13)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_15)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_25)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_PWM4(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_4))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_7))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_14)) \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_16)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_26)) \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_I2C_SCL(__HANDLE__, __IOPOSITION__) do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_1))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_20)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0) #define __HAL_AFIO_REMAP_I2C_SDA(__HANDLE__, __IOPOSITION__)    do{                             \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_4))   \{                                                  \__AFIO_REMAP_SET_OPT2(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_19)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0) #define __HAL_AFIO_REMAP_TOUCH(__HANDLE__, __IOPOSITION__)      do{                                 \if (((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_7)) || \((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_9)) || \((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_10)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_0)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_1)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_2)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_3)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_4)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_5)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_6)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_7)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_8)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_9)) || \((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_12)) || \((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_14)) || \((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_29)))   \{                                                  \if ((__HANDLE__ != GPIOA) || (__IOPOSITION__ != GPIO_PIN_7)) \{                                              \__AFIO_REMAP_SET_OPT7(GPIOA, GPIO_PIN_7);      \}                                              \__AFIO_REMAP_SET_OPT7(__HANDLE__, __IOPOSITION__);     \}                                                  \}while (0)#define __HAL_AFIO_REMAP_I2S_EXT_MCK(__HANDLE__, __IOPOSITION__) do{                                 \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_7))   \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_17)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_I2S_MCK(__HANDLE__, __IOPOSITION__) do{                                 \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_0))   \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_7))  \{                                                  \__AFIO_REMAP_SET_OPT3(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_17)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_I2S_WS(__HANDLE__, __IOPOSITION__)  do{                                 \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_1))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_9))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_9))  \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_13)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_I2S_CK(__HANDLE__, __IOPOSITION__)  do{                                 \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_4))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_8))  \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_8))  \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_12)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_I2S_MOSI(__HANDLE__, __IOPOSITION__)    do{                                 \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_0))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_11)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_10)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_14)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_I2S_MISO(__HANDLE__, __IOPOSITION__)    do{                                 \if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_7))   \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_10)) \{                                                  \__AFIO_REMAP_SET_OPT1(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOA) && (__IOPOSITION__ == GPIO_PIN_11)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \else if ((__HANDLE__ == GPIOB) && (__IOPOSITION__ == GPIO_PIN_15)) \{                                                  \__AFIO_REMAP_SET_OPT4(__HANDLE__, __IOPOSITION__); \}                                                  \}while (0)#define __HAL_AFIO_REMAP_SWJ_ENABLE  do {                                    \__AFIO_REMAP_SET_OPT1(GPIOA, GPIO_PIN_1);  \__AFIO_REMAP_SET_OPT1(GPIOA, GPIO_PIN_4);  \} while(0)#define __HAL_AFIO_REMAP_SWJ_DISABLE do {                                \__AFIO_REMAP_SET_OPT5(GPIOA, GPIO_PIN_1);  \__AFIO_REMAP_SET_OPT5(GPIOA, GPIO_PIN_4);  \} while(0)                                     

极限翻转速度

寄存器操作

int main(void)
{SystemClock_Config(CPU_CLK_240M);GPIO_Init();while (1){CLEAR_BIT(GPIOB->DATA, GPIO_PIN_0);SET_BIT(GPIOB->DATA, GPIO_PIN_0);CLEAR_BIT(GPIOB->DATA, GPIO_PIN_0);SET_BIT(GPIOB->DATA, GPIO_PIN_0);CLEAR_BIT(GPIOB->DATA, GPIO_PIN_0);SET_BIT(GPIOB->DATA, GPIO_PIN_0);CLEAR_BIT(GPIOB->DATA, GPIO_PIN_0);SET_BIT(GPIOB->DATA, GPIO_PIN_0);HAL_Delay(10);}
}


库函数操作

int main(void)
{SystemClock_Config(CPU_CLK_240M);GPIO_Init();while (1){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);HAL_Delay(10);}
}


测试



       PB0闪烁,按下BOOT键可改变PB1、PB2的状态。

main.c


#include <stdio.h>
#include "wm_hal.h"void Error_Handler(void);
static void GPIO_Init(void);static volatile uint8_t key_flag = 0;int main(void)
{uint16_t i = 0, j = 0;SystemClock_Config(CPU_CLK_160M);printf("enter main\r\n");HAL_Init();GPIO_Init();while (1){if (key_flag == 1){key_flag = 0;switch(++j){case 1:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);break;case 2:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);break;case 3:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);break;default:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);j = 0;break;}}if(++i >= 500){HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);i = 0;}HAL_Delay(1);}return 0;
}static void GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIO_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_PIN_SET);GPIO_InitStruct.Pin = GPIO_PIN_0;GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;GPIO_InitStruct.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);HAL_NVIC_SetPriority(GPIOA_IRQn, 0);HAL_NVIC_EnableIRQ(GPIOA_IRQn);}void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
{if ((GPIOx == GPIOA) && (GPIO_Pin == GPIO_PIN_0)){key_flag = 1;}
}void Error_Handler(void)
{while (1){}
}void assert_failed(uint8_t *file, uint32_t line)
{printf("Wrong parameters value: file %s on line %d\r\n", file, line);
}

wm_it.c

#include "wm_hal.h"#define readl(addr) ({unsigned int __v = (*(volatile unsigned int *) (addr)); __v;})
__attribute__((isr)) void CORET_IRQHandler(void)
{readl(0xE000E010);HAL_IncTick();
}__attribute__((isr)) void GPIOA_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIOA, GPIO_PIN_0);
}

【联盛德W806上手笔记】二、GPIO相关推荐

  1. 【联盛德W806上手笔记】七、I2C

    目录 WM_SDK_W806_v0.6.0的库函数 函数 参数 宏 应用示例 初始化 使用 测试 I2C 控制器 功能概述 主要特性 功能描述 传输速率选择 中断及启动停止可控 快速输出及检测信号 寄 ...

  2. 【联盛德W806上手笔记】一、开发环境和烧录程序

    目录 简介 芯片外观 MCU 特性 安全特性 低功耗模式 芯片结构 管脚定义 极限参数 开发环境 SDK的获取 从官网获取 从Q群获取 iosetting大佬 维护的wm-sdk-w806 打开工程 ...

  3. 【联盛德W806上手笔记】五、TIM定时器

    目录 定时器 库函数 函数 参数 宏 Demo中的测试程序 main.c wm_hal_msp.c wm_it.c 实验现象 Windows 10 20H2 HLK-W806-V1.0-KIT WM_ ...

  4. 【联盛德W806上手笔记】三、MCU系统与时钟结构

    目录 总线结构 AHB-1 总线 AHB-2 总线 时钟与复位 主要特性 时钟结构 功能描述 时钟门控 时钟自适应关断 功能复位 时钟分频 寄存器描述 寄存器列表 软件时钟门控使能寄存器 软件时钟掩码 ...

  5. 【联盛德W806上手笔记】八、SPI及其DMA

    目录 高速 SPI 设备控制器 库函数 函数 参数 宏 应用示例 初始化 引脚复用 中断相关 使用 注意事项 DataAlignment Direction 测试 main.c wm_hal_msp. ...

  6. 联盛德W806最小系统开发板第一次上手准备工作

    W806 芯片 是一款安全 IoT MCU 芯片.芯片集成 32 位 CPU 处理器,内置 UART.GPIO.SPI.SDIO.I2C.I2S.PSRAM.7816.ADC.LCD.TouchSen ...

  7. 联盛德W806,W801刷固件步骤

    本文针对无基础玩家参考,如有不对的欢迎指正 1)需要准备物料 1.开发板801或806 2.CH340驱动 (USB转串口驱动) 3.烧入工具(官方首页-芯片-W800-开发工具- 4.PC端固件烧录 ...

  8. 联盛德W806入门教程-CDK安装教程及代码下烧录

    笔者使用的系统板如下图所示: 首先安装代码编译软件CDK: 硬件:⚫ W805/W806 开发板 ⚫ USB 转串口线 软件: Windows 端编译工具:CDK 安装包 链接:[https://pa ...

  9. 联盛德 HLK-W806 (五): W801开发板上手报告

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

最新文章

  1. python基本随机数生成函数有_Python中生成随机数的常用方法
  2. Stream Part.7
  3. 如何用Pygame写游戏(十四)
  4. python独立图形_Python图形界面(自学Python系列笔记-4)(不定期更新)
  5. Scrapy创建zentao爬虫
  6. listview去掉底部多出的边框黑色
  7. oracle vba 数组_vba:使用array中的文本从selection.find返回页码
  8. 笨方法学python第二版_笨方法学python II
  9. 雷达 航迹跟踪 matlab,一种基于MATLAB建模的雷达航迹显示求解方法与流程
  10. ttest函数使用方法_TTEST 函数 - EXCEL 2010 中文帮助文档
  11. alert日志大量DISTRIB TRAN GDDB.6d36e46c.419.26.15318211问题
  12. 舔狗不会永远舔你的爱答不理和高冷
  13. 图像修复:专栏博文推荐查阅顺序
  14. RTMPLive流媒体直播软件应用解决方案
  15. 系统间接口调用/接口对接 Java
  16. ADC 获取数据(stm32)
  17. 特斯拉竞争对手Rivian获7亿美元融资 亚马逊领投
  18. 小米10开始抓取日志怎么关闭_除了*#*#6485#*#*,小米手机还有这些神秘暗号
  19. php表格设置标题,每页表格标题字PHPWord
  20. 先电IAAS V2.2(2017版)平台搭建手册---脚本搭建

热门文章

  1. linux中的memory management和page mapping
  2. Md5 Md5实现原理
  3. 请教大家:如何把.DCU文件反编译回源代码?谢谢。
  4. 因为你的电脑安装了即点即用_即你所爱
  5. opencv (一) 学习通过OpenCV图形界面及基础
  6. leetcode22. 括号生成(回溯)
  7. Python循环的一些基本练习
  8. 实现织梦dedecms百度主动推送(实时)网页抓取
  9. 8.19noip模拟题
  10. MYSQL jdbc autoReconnect