Picproje Elektronik Sitesi

PICPROJE PROGRAMLAMA DERSLERİ => STM32 Örnekleri => Konuyu başlatan: unknownperson - 04 Mart 2017, 11:05:29

Başlık: HAL kütüphanesinde böyle bir fonksyion var mı ?
Gönderen: unknownperson - 04 Mart 2017, 11:05:29
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);
}
}
Başlık: Ynt: HAL kütüphanesinde böyle bir fonksyion var mı ?
Gönderen: muhittin_kaplan - 04 Mart 2017, 15:53:34
Timer int. ile yapabilirsiniz.
Başlık: Ynt: HAL kütüphanesinde böyle bir fonksyion var mı ?
Gönderen: Cemre. - 04 Mart 2017, 17:22:11
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.
Başlık: Ynt: HAL kütüphanesinde böyle bir fonksyion var mı ?
Gönderen: unknownperson - 04 Mart 2017, 21:05:13
İnterrupt yapınca gene sürekli göndermem gereken analog sinyalden cikip dac islemini yapmicak mi ?
Başlık: Ynt: HAL kütüphanesinde böyle bir fonksyion var mı ?
Gönderen: piscopatos2 - 20 Mart 2017, 14:02:50
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);
   }
}
Başlık: Ynt: HAL kütüphanesinde böyle bir fonksyion var mı ?
Gönderen: unknownperson - 22 Nisan 2017, 00:49:28
Hocam çok sağolun deneyeceğim