調試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函數里的引腳初始化也沒有反應。
若有知曉者,敬請告知,不勝感謝!
|