当前位置:   article > 正文

【联盛德W806上手笔记】二、GPIO

w806

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或1

void 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);
//中断回调函数,可以理解为中断函数具体要响应的动作。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

参数

结构体

typedef struct
{
	uint32_t Pin;
	uint32_t Mode;
	uint32_t Pull;
} GPIO_InitTypeDef;

typedef enum
{
	GPIO_PIN_RESET = 0,
	GPIO_PIN_SET
} GPIO_PinState;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

GPIO_TypeDef

#define GPIOA	((GPIO_TypeDef *)GPIOA_BASE)
#define GPIOB	((GPIO_TypeDef *)GPIOB_BASE)
  • 1
  • 2

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

GPIO_InitTypeDef.Pull

#define GPIO_NOPULL						0x12
#define GPIO_PULLUP						0x13
#define GPIO_PULLDOWN					0x14
  • 1
  • 2
  • 3

       一般出现在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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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)										

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
  • 499
  • 500
  • 501
  • 502
  • 503
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522
  • 523
  • 524
  • 525
  • 526
  • 527
  • 528
  • 529
  • 530
  • 531
  • 532
  • 533
  • 534
  • 535
  • 536
  • 537
  • 538
  • 539
  • 540
  • 541
  • 542
  • 543
  • 544
  • 545
  • 546
  • 547
  • 548
  • 549
  • 550
  • 551
  • 552
  • 553
  • 554
  • 555
  • 556
  • 557
  • 558
  • 559
  • 560
  • 561
  • 562
  • 563
  • 564
  • 565
  • 566
  • 567
  • 568
  • 569
  • 570
  • 571
  • 572
  • 573
  • 574
  • 575
  • 576
  • 577
  • 578
  • 579
  • 580
  • 581
  • 582
  • 583
  • 584
  • 585
  • 586
  • 587
  • 588
  • 589
  • 590
  • 591
  • 592
  • 593
  • 594
  • 595
  • 596
  • 597
  • 598
  • 599
  • 600
  • 601
  • 602
  • 603
  • 604
  • 605
  • 606
  • 607
  • 608
  • 609
  • 610
  • 611
  • 612
  • 613
  • 614
  • 615
  • 616
  • 617
  • 618
  • 619
  • 620
  • 621
  • 622
  • 623
  • 624
  • 625
  • 626
  • 627
  • 628
  • 629
  • 630
  • 631
  • 632
  • 633
  • 634
  • 635
  • 636
  • 637
  • 638
  • 639
  • 640
  • 641
  • 642
  • 643
  • 644
  • 645
  • 646
  • 647
  • 648
  • 649
  • 650
  • 651
  • 652
  • 653
  • 654
  • 655
  • 656
  • 657
  • 658
  • 659
  • 660
  • 661
  • 662
  • 663
  • 664
  • 665
  • 666
  • 667
  • 668
  • 669
  • 670
  • 671

极限翻转速度

寄存器操作

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);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述
在这里插入图片描述

库函数操作

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);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述
       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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

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);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/288332
推荐阅读
  

闽ICP备14008679号