HAL kütüphanesinde böyle bir fonksyion var mı ?

Başlatan unknownperson, 04 Mart 2017, 11:05:29

unknownperson

Amacım 20ms'de 1 pals üretmek, bunu sürekli yapmayacağım mesela bir pinden true gelince başlayacak false gelince duracak. Bunu aşağıdaki kod ile yapabilirim diye düşünüyorum, fakat bu şekilde yaparsam programda aynı zamanda başka bir pinden sürekli analog sinyal basıyorum bu while döngüsüne girildiğinde diğer basma işlemi duracak. Benim istediğim HAL kütüphanesinde bir fonksiyon çağırayım bu fonksiyon 20ms'de 1 pals'i sürekli arkaplanda üretsin ben diğer işlemleri yaparken o üretmeye devam etsin ben bu fonksiyona stop dediğimde dursun.

if(watervalve==1)
{
 while(HAL_GPIO_ReadPin(ValvePin))
 {
  HAL_GPIO_TogglePin(FlowmeterPin);
  Delayms(10);
 }
}

muhittin_kaplan


Cemre.

Sorunuz üzerine 32F103C8 işlemcisi için Timer External Trigger Gated Mode olacak şekilde init etmeye çalıştım. TIM2 için PA0 pininin High Low durumuna göre Timer'ın CNT reg'inin artmaya başladığını/durduğunu görebildim. Ancak Interrupt'ları etkinleştirmeme rağmen PeriodElapsedCallback'ine hiç dönmedi MCU. Belki bir hata yaptım ama tavsiyem External Trigger Gated Mode kısmını bir kurcalamanız yönünde.

Kolay gelsin.

unknownperson

İnterrupt yapınca gene sürekli göndermem gereken analog sinyalden cikip dac islemini yapmicak mi ?

piscopatos2

Systick ile yapabilirsiniz.
void SysTick_Init(void) {
	/****************************************
	 *SystemFrequency/1000      1ms         *
	 *SystemFrequency/100000    10us        *
	 *SystemFrequency/1000000   1us         *
	 *****************************************/
	while (SysTick_Config(SystemCoreClock / 1000) != 0) {
	} // One SysTick interrupt now equals 1us

}
uint32_t counter =0;
void SysTick_Handler(void) {
	counter++;
}

int main(void){
SysTick_Init();

while(1){
   if(counter>20){
      counter=0;
      if (GPIO_ReadPin(ValvePin))
         GPIO_TogglePin(FlowmeterPin);
   }
}

unknownperson