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);
}
}
Timer int. ile yapabilirsiniz.
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.
İnterrupt yapınca gene sürekli göndermem gereken analog sinyalden cikip dac islemini yapmicak mi ?
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);
}
}
Hocam çok sağolun deneyeceğim