stm32中的编程问题,keil 5编辑无错误,问题是HCSR04_Init函数里结构体指针赋值无效是为什么?

2019-07-15 08:10发布

调试hcsr04的代码
.h文件中,定义一个结构体
typedef struct {
float Distance;                 /*!< 用厘米测量传感器的距离*/
GPIO_TypeDef* ECHO_GPIOx;       /*!< 指向用于 ECHO pin 的 GPIOx 端口的指针。仅供私人使用 */
uint16_t ECHO_GPIO_Pin;         /*!<*/
GPIO_TypeDef* TRIGGER_GPIOx;    /*!< 指向用于 TRIGGER pin 的 GPIOx 端口的指针。仅供私人使用 */
uint16_t TRIGGER_GPIO_Pin;      /*!<  */
} TM_HCSR04_t;

申明函数
uint8_t HCSR04_Init(TM_HCSR04_t* HCSR04, GPIO_TypeDef* ECHO_GPIOx, uint16_t ECHO_GPIO_Pin, GPIO_TypeDef* TRIGGER_GPIOx, uint16_t TRIGGER_GPIO_Pin);

.c文件
uint8_t HCSR04_Init(TM_HCSR04_t *HCSR04, GPIO_TypeDef* ECHO_GPIOx, uint16_t ECHO_GPIO_Pin, GPIO_TypeDef* TRIGGER_GPIOx, uint16_t TRIGGER_GPIO_Pin)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Save everything */
HCSR04->ECHO_GPIOx = ECHO_GPIOx;
HCSR04->ECHO_GPIO_Pin = ECHO_GPIO_Pin;
HCSR04->TRIGGER_GPIOx = TRIGGER_GPIOx;
HCSR04->TRIGGER_GPIO_Pin = TRIGGER_GPIO_Pin;

RCC_APB2PeriphClockCmd(HCSR04_CLK,ENABLE);
/* Trigger pin */
GPIO_InitStructure.GPIO_Pin = HCSR04->TRIGGER_GPIO_Pin;//trigger发送电平引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(HCSR04->TRIGGER_GPIOx, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04->TRIGGER_GPIOx,HCSR04->TRIGGER_GPIO_Pin);

/* Echo pin */
GPIO_InitStructure.GPIO_Pin = HCSR04->ECHO_GPIO_Pin;//echo返回电平引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG; //浮空输入
GPIO_Init(HCSR04->ECHO_GPIOx, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04->ECHO_GPIOx,HCSR04->ECHO_GPIO_Pin);

/*开始测量, 检查传感器是否工作正常 */
if (HCSR04_Read(HCSR04) >= 0)
{  
  /* Sensor OK */
  return HCSR04_OK;
}
/* Sensor error */
    return HCSR04_ERROR;
}
主函数编辑如下
int main(void)
{
TM_HCSR04_t *hcsr04; //申明一个结构体指针
HCSR04_Init(hcsr04,HCSR04_PORT,HCSR04_ECHO,HCSR04_PORT,HCSR04_TRIG);
for(;;)
{
  length=HCSR04_Read(hcsr04);
}
}
keil 5编辑无错误,问题是HCSR04_Init函数里结构体指针赋值无效,HCSR04_Init函数里的引脚初始化也没有反应。
若有知晓者,敬请告知,不胜感谢!


0条回答

一周热门 更多>