ArteryF413平台Keil uVision中向函数传递GPIO端口与引脚的方法
解决ArteryF413平台GPIO端口参数传递问题
在ArteryF413的Keil开发环境中,GPIO端口参数的正确类型是GPIO_TypeDef*——因为GPIOC这类端口宏本质是指向GPIO寄存器结构体的指针(比如HAL库中定义为#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE))。
函数声明与实现示例
先把你的函数参数类型修正为正确的端口类型,示例如下:
// state:1=继电器导通,0=继电器断开(可根据实际硬件触发逻辑调整) void Set_relay_state_for_non_china_mode(GPIO_TypeDef* gpio_port, uint16_t gpio_pin, uint8_t state) { if (state) { HAL_GPIO_WritePin(gpio_port, gpio_pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(gpio_port, gpio_pin, GPIO_PIN_RESET); } }
如果你的项目用的是标准库而非HAL库,替换成标准库的引脚控制函数即可:
void Set_relay_state_for_non_china_mode(GPIO_TypeDef* gpio_port, uint16_t gpio_pin, uint8_t state) { if (state) { GPIO_SetBits(gpio_port, gpio_pin); } else { GPIO_ResetBits(gpio_port, gpio_pin); } }
调用方式
直接传递你已定义的宏就行,因为VALVE_OUT_3_GPIO_Port本身就是GPIO_TypeDef*类型,VALVE_OUT_3_Pin是uint16_t类型,完全匹配参数要求:
// 控制VALVE_OUT_3对应的继电器导通 Set_relay_state_for_non_china_mode(VALVE_OUT_3_GPIO_Port, VALVE_OUT_3_Pin, 1); // 控制VALVE_OUT_3对应的继电器断开 Set_relay_state_for_non_china_mode(VALVE_OUT_3_GPIO_Port, VALVE_OUT_3_Pin, 0);
内容的提问来源于stack exchange,提问作者Kian Farooghi
相关产品推荐
相关产品推荐

