请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2355 我在头文件中包含以下代码:
#define PORT1 (GPIO_RegDef_t *)P1_BASE
#define PORT2 (GPIO_RegDef_t *)P2_BASE
#define PORT3 (GPIO_RegDef_t *)P3_BASE
#define PORT4 (GPIO_RegDef_t *)P4_BASE
#define PORT5 (GPIO_RegDef_t *)P5_BASE
#define PORT6 (GPIO_RegDef_t *)P6_BASE
typedef struct
{
uint8_t GPIO_PinNumber; /*values @PIN_NUMBERS */
uint8_t GPIO_PinMode; /*values @enum gpioType_t */
uint8_t GPIO_IO_Mode; /*values @PIN_IO_MODE */
uint8_t GPIO_InitValue; /*values @PIN_INIT_VALUES */
uint8_t GPIO_PinPuPdCntrl; /*values @PIN_PULLUP_PULLDWN */
}GPIO_PinConfig_t;
typedef struct
{
__vo uint16_t PIN; /*GPIO port input value register Offset 0x00 */
__vo uint16_t POUT; /*GPIO port output value register Offset 0x02 */
__vo uint16_t DIR; /*GPIO port direction register Offset 0x04 */
__vo uint16_t PREN; /*GPIO resistor enable register Offset 0x06 */
uint16_t RESERVED; /* Reserved Offset 0x08 */
__vo uint16_t SEL[2];/*GPIO port function select register Offset 0x0A SEL[0] - 0x0C SEL[1] */
__vo uint16_t IV; /*GPIO port output data register Offset 0x0E */
uint16_t RSVDA[3]; /*Reserved Offset 0x10, 0x12, 0x14 */
__vo uint16_t PSELC; /*GPIO Complement selection Offset 0x16 */
__vo uint16_t PIES; /*GPIO Interrupt edge select Offset 0x18 */
__vo uint16_t PIE; /*GPIO Interrupt edge Offset 0x1A */
__vo uint16_t PIFG; /*GPIO Interrupt flag Offset 0x1C */
}GPIO_RegDef_t;
/*
* handle structure for GPIO pin
*/
typedef struct
{
GPIO_RegDef_t *pGPIOx; /*holds base address of GPIO port to which pin belongs */
GPIO_PinConfig_t GPIO_PinConfig; /*holds GPIO pin configuration settings */
}GPIO_Handle_t;
在 c 文件中、我有:
void GPIO_Init(GPIO_Handle_t *pGPIOHandle, uint8_t type)
{
gpioType_t io;
GPIO_Handle_t s;
// s = &(pGPIOHandle->pGPIOx);
io = (gpioType_t)(pGPIOHandle->GPIO_PinConfig.GPIO_PinMode);
switch (io)
{
case GPIO_MODE_IO:
if (type)
GPIO_WriteOutputPin(s.pGPIOx, pGPIOHandle->GPIO_PinConfig.GPIO_PinNumber, \
pGPIOHandle->GPIO_PinConfig.GPIO_InitValue);
GPIO_IO_ConfigurePin(pGPIOHandle->pGPIOx, pGPIOHandle->GPIO_PinConfig.GPIO_PinNumber, \
pGPIOHandle->GPIO_PinConfig.GPIO_IO_Mode);
break;
case GPIO_MODE_ALT1:
break;
case GPIO_MODE_ALT2:
break;
case GPIO_MODE_ANALG:
break;
}
}
void GPIO_IO_ConfigurePin(GPIO_Handle_t *pGPIOHandle, uint8_t PinNumber, uint8_t type)
{
if (type)
pGPIOHandle->pGPIOx->DIR |= (1 << PinNumber);
else
pGPIOHandle->pGPIOx->DIR &= ~(1 << PinNumber);
}
void GPIO_WriteOutputPin(GPIO_Handle_t *pGPIOHandle, uint8_t PinNumber, uint8_t value)
{
if (value)
pGPIOHandle->pGPIOx->POUT |= (1 << PinNumber);
else
pGPIOHandle->pGPIOx->POUT &= ~(1 << PinNumber);
}
写入和配置函数本身工作正常...我正在尝试将它们作为函数调用嵌入到 GPIO_Init()中。 我收到以下警告:
"GPIO_RegDef_t *"类型的#169-D 参数与"GPIO_handle_t *"类型的参数不兼容
有人能告诉我如何解决这个问题吗? 我尝试了各种各样的东西,但 没有结果。
此致
Steve