824 2022-03-27 21:33 采纳率: 100%
浏览 29
已结题

这几个错误是什么原因呢,百度的方法也不能用

img

img

img

img


这个上面不是已经定义了吗,一共使用了两次,为什么都提示没有定义呢

img

这个是代码


#include "HC_SR04.h"
#include "stm32f10x.h"
#include "SysTick.h"

extern uint32_t mscount = 0;
void HC_SR04Config(void)
{
     GPIO_InitTypeDef GPIO_hcsr04init;
     TIM_TimeBaseInitTypeDef TIM_hcsr04init; 
     NVIC_InitTypeDef NVIC_hcsr04init;
    
     NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1);

    //gpio配置
     GPIO_hcsr04init.GPIO_Mode  = GPIO_Mode_Out_PP;
     GPIO_hcsr04init.GPIO_Pin   = GPIO_Pin_11;
     GPIO_hcsr04init.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init( GPIOB, &GPIO_hcsr04init);
    
     GPIO_hcsr04init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
     GPIO_hcsr04init.GPIO_Pin   = GPIO_Pin_10;
     GPIO_Init( GPIOB, &GPIO_hcsr04init);
    
    //定时器配置
     TIM_hcsr04init.TIM_ClockDivision = TIM_CKD_DIV1;
     TIM_hcsr04init.TIM_CounterMode   = TIM_CounterMode_Up;
     TIM_hcsr04init.TIM_Period        = 100-1;
     TIM_hcsr04init.TIM_Prescaler     = 72-1;
    
     TIM_TimeBaseInit(TIM4, &TIM_hcsr04init);
     TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
     TIM_Cmd(TIM4,DISABLE);
     
  //中断配置
   NVIC_hcsr04init.NVIC_IRQChannel                                   = TIM4_IRQn;
     NVIC_hcsr04init.NVIC_IRQChannelPreemptionPriority   = 0;
     NVIC_hcsr04init.NVIC_IRQChannelSubPriority               = 0;
     NVIC_hcsr04init.NVIC_IRQChannelCmd                         = ENABLE;
     NVIC_Init(&NVIC_hcsr04init);
 }
void Open_tim4(void)
{
    //uint32_t mscount = 0;
    TIM_SetCounter(TIM4, 0);
  mscount = 0;
    TIM_Cmd(TIM4,ENABLE);

}

void Clo_tim4(void)
{
        TIM_Cmd(TIM4,DISABLE);

}

void  TIM4_IRQHandler(void)
{
    //uint32_t mscount = 0;
  if(TIM_GetITStatus(TIM4, TIM_IT_Update)!= RESET)//判断是否发生中断
    {
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);//清除中断标志位
        mscount++;
    }

}
//获取定时器计器的值
int Getecho_time(void)
{
    uint32_t t = 0;
//    t = mscount * 1000;
  t = TIM_GetCounter(TIM4);
    TIM4->CNT = 0;
    usdelay(50000);
    
    return t;    
}
//获取超声波测距距离
float  Getlength(void)
{
    int i = 5;
    uint32_t t =0;
    float length = 0;
    float sum = 0;
    while(i != 5)
        {
        TRIG_send(1);
        usdelay(20);
        TRIG_send(0);
            
            while(EHCO_rece == 0)
            {
                 Open_tim4();
                 i=i+1;
            }
            while(EHCO_rece == 1) 
            {
                Clo_tim4();
                t = Getecho_time();
                length = (float)t/58;
                sum = sum+length;
            }
        }
        length=sum/5.0;
        return length;
}

  • 写回答

2条回答 默认 最新

  • qllaoda 2022-03-27 23:10
    关注

    第一个问题,问题可能发生在前一个头文件里,错误到这个文件才体现出来,建议检查前面的头文件。因为从那个文件的前面两句看,确实看不出什么问题。
    extern声明的外部变量,是不能给初值的,编译器认为这句是有语法错误的,所以这里声明的外部变量,后面就是不认的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 3月27日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)