找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2367|回复: 0
打印 上一主题 下一主题
收起左侧

求各路大神看看,stm32超声波测距,main里面一调用senor_using串口调试助手什么也没有

[复制链接]
跳转到指定楼层
楼主
ID:167020 发表于 2017-3-25 18:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stm32f10x.h"
#include <stdio.h>
int overcount=0;
void RCC_Configuration(void);
void NVIC_Config(void);
void USART1_Configuration(void);
void UART_PutChar(USART_TypeDef* USARTx, char Data);
void UART_PutStr (USART_TypeDef* USARTx, char *str);
float Senor_Using(void);
void CH_SR04_Init(void);

void delay1ms(unsigned int x)
{  
        unsigned char a,b;  
        for(a=x;a>0;a--)  
                for(b=100;b>0;b--);
}

void delay_us(u32 Number)
{
    u32 i=0;

     while(Number--){
      i=12; while(i--);
     }
}

int main(void)
{
        RCC_Configuration();
        USART1_Configuration();
        NVIC_Config();
        CH_SR04_Init();
        UART_PutChar(USART1,Senor_Using());     //一调用senor_using串口调试助手就什么也输不出来,不调用的话至少会输出hello!
        while(i)
           {
                        UART_PutStr ( USART1, "hello!");
                        delay1ms(1000);
        }
}

void RCC_Configuration(void)
{
        //----------ê1óÃía2¿RC¾§Õñ-----------
        RCC_DeInit();                        //3õê¼»ˉÎaè±ê¡Öμ
        RCC_HSEConfig(RCC_HSE_ON);        //ê1Äüía2¿μĸßËùê±Öó
        while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);        //μè′yía2¿¸ßËùê±Öóê1Äü¾íD÷
        
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);        //Enable Prefetch Buffer
        FLASH_SetLatency(FLASH_Latency_2);                //Flash 2 wait state
        
        RCC_HCLKConfig(RCC_SYSCLK_Div1);                //HCLK = SYSCLK
        RCC_PCLK2Config(RCC_HCLK_Div1);                        //PCLK2 =  HCLK
        RCC_PCLK1Config(RCC_HCLK_Div2);                        //PCLK1 = HCLK/2
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);        //PLLCLK = 8MHZ * 9 =72MHZ
        RCC_PLLCmd(ENABLE);                        //Enable PLLCLK

        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);        //Select PLL as system clock
        while(RCC_GetSYSCLKSource()!=0x08);                //Wait till PLL is used as system clock source
        
        //---------′ò¿aÏàó|íaéèê±Öó--------------------
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);        //ê1ÄüAPB2íaéèμÄGPIOAμÄê±Öó                 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
}
/*******************************************************************************
        oˉêyÃû£oUSART1_Configuration
        êä  èë:
        êä  3ö:
        1|ÄüËμÃ÷£o
        3õê¼»ˉ′®¿úó2¼té豸£¬ÆôóÃÖD¶Ï
        ÅäÖÃ2½Öè£o
        (1)′ò¿aGPIOoíUSART1μÄê±Öó
        (2)éèÖÃUSART1ὸö1ü½ÅGPIOÄ£ê½
        (3)ÅäÖÃUSART1êy¾Y¸ñ꽡¢2¨ìØÂêμè2Îêy
        (4)ê1ÄüUSART1½óêÕÖD¶Ï1|Äü
        (5)×îoóê1ÄüUSART11|Äü
*/
void USART1_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;              
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         
  GPIO_Init(GPIOA, &GPIO_InitStructure);                  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;              
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         
  GPIO_Init(GPIOA, &GPIO_InitStructure);
        /* μú42½£oÅäÖÃUSART12Îêy
            - BaudRate = 115200 baud
            - Word Length = 8 Bits
            - One Stop Bit
            - No parity
            - Hardware flow control disabled (RTS and CTS signals)
            - Receive and transmit enabled
        */        
    USART_InitStructure.USART_BaudRate = 9600;                    
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;   
    USART_InitStructure.USART_StopBits = USART_StopBits_1;      
    USART_InitStructure.USART_Parity = USART_Parity_No;         
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;   
    USART_Init(USART1,&USART_InitStructure);                    
    USART_Cmd(USART1,ENABLE);  
}

void NVIC_Config(void)
{
                        NVIC_InitTypeDef NVIC_InitStructer;

                        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

                        NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority=0;
                        NVIC_InitStructer.NVIC_IRQChannelSubPriority=0;
                        NVIC_InitStructer.NVIC_IRQChannel=TIM2_IRQn;
                        NVIC_InitStructer.NVIC_IRQChannelCmd=ENABLE;

                        NVIC_Init(&NVIC_InitStructer);
}

void CH_SR04_Init(void)
{
                GPIO_InitTypeDef GPIO_InitStructer;

                TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer;

                /*TRIG????*/
                GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
                GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
                GPIO_InitStructer.GPIO_Pin=GPIO_Pin_8;
                GPIO_Init(GPIOB, &GPIO_InitStructer);

                /*ECOH????*/
                GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IN_FLOATING;
                GPIO_InitStructer.GPIO_Pin=GPIO_Pin_9;

                GPIO_Init(GPIOB, & GPIO_InitStructer);

                TIM_DeInit(TIM2);
                TIM_TimeBaseInitStructer.TIM_Period=999;
                TIM_TimeBaseInitStructer.TIM_Prescaler=71; //????72
                TIM_TimeBaseInitStructer.TIM_ClockDivision=TIM_CKD_DIV1;//???
                TIM_TimeBaseInitStructer.TIM_CounterMode=TIM_CounterMode_Up;

                TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructer);

                TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

                NVIC_Config();
                TIM_Cmd(TIM2,DISABLE);
}



float Senor_Using(void)
{
                                float length=0,sum=0;
                                u16 tim;
                                int i=0;
                                while(i!=5)
                                {
                                GPIO_SetBits(GPIOB, GPIO_Pin_8);  
                                delay_us(20);  
                                GPIO_ResetBits(GPIOB, GPIO_Pin_8);;
                                while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==RESET);
                                TIM_Cmd(TIM2,ENABLE);
                                i+=1;
                                while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==SET);
                                TIM_Cmd(TIM2,DISABLE);
                                tim=TIM_GetCounter(TIM2);
                                length=(tim+overcount*1000)/58.0;
                                sum=length+sum;
                                TIM2->CNT=0;
                                overcount=0;  
                                delay1ms(100);
                                }
                                length=sum/5;
                                return length;
}



void TIM2_IRQHandler(void)
{
                        if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)

                                {
                        TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
                        overcount++;
  }
}

void UART_PutChar(USART_TypeDef* USARTx, char Data)  
{  
    USART_SendData(USARTx, Data);  
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);  
}  

void UART_PutStr (USART_TypeDef* USARTx, char *str)   
{   
    while (0 != *str)   
    {   
        UART_PutChar(USARTx, *str);   
        str++;   
    }   
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表