HC-SR04 mesafe sensörü ile ARM kullanarak ölçüm yapma

Başlatan pulpyportakal, 10 Mayıs 2013, 12:44:46

pulpyportakal

STM32f4 kiti Kullanarak HC-SR04 mesafe sensörünün ölçüm yapmasını istiyorum.Önce PWM üretmem gerekiyor sanırım ama başaramadım.Bu konuda bilgisi olan arkadaşlar varsa yardımlarınızı bekliyorum.

crazy

STM32F103C8  hcr-04 mesafe sensör örneği

#include "stm32f10x.h"                  // Device header

uint16_t Mesafe = 0;

/*PA0 pin (TRIG) PA1 pin ,(ECHO) */
void EXTI1_IRQHandler(void)
{
   EXTI->PR |= 0x00000002; /*Pending bit for line 1*/
   if(GPIOA->IDR & 0x0002)
	 {
	   TIM3->CR1 |= 0x0001; /*counter enable*/
	 }
   else
	 {                                                                                          
      TIM3->CR1 &= ~(0x0001); /*counter disable*/
      Mesafe = TIM3->CNT/58; 
      TIM3->CNT = 0; 
   }
}

int main()
{
RCC->APB2ENR  |= 0x00000015; /*GPIOA-AF clock enable*/
GPIOA->CRL       = 0x8A; /*PA0 AF output push -pull PA1 input pull up /pull down */
GPIOC->CRH      |= (0x3 << 20); 
GPIOC->CRH &   = (~(0xC << 20)); 
RCC->APB1ENR  |= 0x00000003; /* TIM2-3 Clock enable */

TIM2->PSC        =71; // SystemCoreClock/1000000-1; //
TIM2->ARR        = 60000-1; /*Period*/
TIM2->CCR1      = 10;    /*Duty  */
TIM2->CR1       |= 0x0080; /*arpe*/
TIM2->CCMR1   |= 0x0068; /*Bit 3 OC1PE: Output compare 1 preload enable-OC1M: Output compare 1 mode-110: PWM mode 1*/
TIM2->CR1       |= 0x0001; /*counter enable*/
TIM2->CCER     |= 0x0001;/*Bit 0 CC1E: Capture/Compare 1 output enable*/

TIM3->PSC        =71; //SystemCoreClock/1000000-1; /*Prescaler*/
TIM3->ARR        = 50000;  

AFIO->EXTICR[0] = 0x0000; /*0000: PA1 pin*/
EXTI->IMR           = 0x00000002; /*Interrupt mask register PA1*/
EXTI->RTSR         = 0x00000002; /*Rising trigger enabled (for Event and Interrupt) for input line*/
EXTI->FTSR         = 0x00000002; /*Falling trigger enabled (for Event and Interrupt) for input line.*/
//NVIC_EnableIRQ(EXTI1_IRQn);
NVIC->ISER[0]    = (1<<7);

	
	
	
	while(1)
	{
		if(Mesafe>30){
			GPIOC->ODR |= 0x00002000;
		}
		else{
		
		        GPIOC->ODR =0;
		}
	
	}
	}