embeded/Cortex-M3 STM2025. 6. 5. 11:34

timer 가 빠르고 빈번하게 설정되는게 아니라면 큰 문제는 없는데

희한하게 gpio 함수가 무거운가 timer 에서 직접 HAL_GPIO 함수를 호출하기 보다는

플래그를 설정하고 메인루프에서 값을 보고 바꾸는 편인데 되긴하나 보...다?

 

[링크 : https://blognavercomcheetah254.tistory.com/137]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 uart tx dma  (0) 2025.06.18
stm32 pwm 주파수 계산  (0) 2025.06.05
stm32 pwm interrupt  (0) 2025.06.02
stm32 stop mode - main thread  (0) 2025.05.29
stm32 boot loader(shipping)  (0) 2025.05.13
Posted by 구차니
embeded/Cortex-M3 STM2025. 6. 2. 17:23

그나저나 stm32f4xx_hal_tim.c 에서 내가 만든 파일의 함수를 호출하게해서

pwm이 끝나면 카운트를 갂아 원하는 횟수만큼 소리내려고 했는데

interrupt 내에서 호출한 변수가 증가만 하고 리셋되지 않는 이상한 현상이 발생

해결책은 나중에 찾아봐야겠다.

/* stm32f4xx_hal_tim.c */


void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
{
  ...중략
  /* TIM Update event */
  if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET)
  {
    if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) !=RESET)
    {
      __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
      HAL_TIM_PeriodElapsedCallback(htim);
    }
  }
  ...중략
}

[링크 https://m.blog.naver.com/eziya76/220934409487]

 

__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
__HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);

void TIM3_IRQHandler(void)
{
    if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE)) {
        __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
        // PWM 1회 출력 후 이벤트 처리
    }
}

 

쉬운 방법으로 One pulse mode도 있다

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 pwm 주파수 계산  (0) 2025.06.05
stm32 timer로 gpio 토글하기  (0) 2025.06.05
stm32 stop mode - main thread  (0) 2025.05.29
stm32 boot loader(shipping)  (0) 2025.05.13
stm32flash  (0) 2025.05.08
Posted by 구차니
embeded/Cortex-M3 STM2025. 5. 29. 10:54

stm32 에서 gpio 핸들러에다가 stop mode 들어가게 해놨더니 작동안되서 찾아보니

main thread에서 stop이 들어가야 작동한다고 한다.

 

flag 세워주고 main loop에서 처리하면 끝

[링크 : https://community.st.com/t5/stm32-mcus-products/enter-exit-stop-mode-with-one-gpio-pin/td-p/621929]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 timer로 gpio 토글하기  (0) 2025.06.05
stm32 pwm interrupt  (0) 2025.06.02
stm32 boot loader(shipping)  (0) 2025.05.13
stm32flash  (0) 2025.05.08
stm32 timer로 gpio 에 연결된 led on/off  (0) 2025.03.26
Posted by 구차니
embeded/Cortex-M3 STM2025. 5. 13. 14:03

예전에도 넣어줬던가 모르겠네

2.3.8 Boot modes
At startup, boot pins are used to select one of three boot options:
• Boot from user Flash
• Boot from system memory
• Boot from embedded SRAM
The bootloader is located in the system memory. It is used to reprogram the flash memory by using USART1. For further details, refer to AN2606, available on www.st.com.

[링크  https://www.st.com/resource/en/datasheet/cd00161566.pdf]

[링크  https://www.st.com/resource/en/application_note/an2606-stm32-microcontroller-system-memory-boot-mode-stmicroelectronics.pdf]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 pwm interrupt  (0) 2025.06.02
stm32 stop mode - main thread  (0) 2025.05.29
stm32flash  (0) 2025.05.08
stm32 timer로 gpio 에 연결된 led on/off  (0) 2025.03.26
stm32 sleep mode  (0) 2025.03.10
Posted by 구차니
embeded/Cortex-M3 STM2025. 5. 8. 17:22

리눅스 배포판에 포함된 stm32용 bootloader용 uart / i2c 업데이트 프로그램

나중에 한번 써봐야지

 

stm32flash - flashing utility for STM32 through UART or I2C

[링크  https://manpages.ubuntu.com/manpages/bionic/man1/stm32flash.1.html]

[링크  https://sourceforge.net/p/stm32flash/wiki/Home/]

 

 

 

 

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 stop mode - main thread  (0) 2025.05.29
stm32 boot loader(shipping)  (0) 2025.05.13
stm32 timer로 gpio 에 연결된 led on/off  (0) 2025.03.26
stm32 sleep mode  (0) 2025.03.10
STM32 float point support 활성화시 %f 출력 NaN  (0) 2025.03.07
Posted by 구차니
embeded/Cortex-M3 STM2025. 3. 26. 15:17

pwm 에서는 안되던데 아래 함수는 되려나?

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    GAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); 
}

[링크 : https://www.youtube.com/watch?v=sdr0EFT2LqU]

[링크 : https://m.blog.naver.com/eziya76/220934409487]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 boot loader(shipping)  (0) 2025.05.13
stm32flash  (0) 2025.05.08
stm32 sleep mode  (0) 2025.03.10
STM32 float point support 활성화시 %f 출력 NaN  (0) 2025.03.07
STM32 timer 사용하기  (0) 2024.12.13
Posted by 구차니
embeded/Cortex-M3 STM2025. 3. 10. 12:31

클럭을 12MHz정도로 낮췄더니

sleep mode로는 전력차이가 안나고

stop mode로 가야지 좀 차이가 난다.

uA 단위로는 standby mode로 가야 할 듯?

 

HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();

[링크 : https://blog.naver.com/wararat/221024526207]

[링크 : https://blog.naver.com/eziya76/221543393453]

 

 

멀 잘못했나.. sleep() 에서는 소비전력 차이가 없고 uart 인터럽트가 작동한다.

죽은거 맞아? 그렇다고 main loop가 살아나는건 또 아닌디..

[링크 : https://controllerstech.com/low-power-modes-in-stm32/]

Posted by 구차니
embeded/Cortex-M3 STM2025. 3. 7. 15:21

하나는 값이 나오고

다른 하나는 -nan 으로 나오는데 정체가 멀까?

 

아래는 갑싱 별로 차이나지 않는데 다양하게 이상한 출력을 보여주는 중

STM32의 float point enumation 문제가 있나?

Temperature: 2999(2999) -> 2.0°C
Temperature: 2999(2999) -> 26.7°C
Temperature: 2996 -> 26.4°C
Temperature: 2996 -> -nan°C
Temperature: 2998(2998) -> -0.0°C
Temperature: 2997(2997) -> 0.0°C
Temperature: 2996(2996) -> 2681562227601498728190175138316381969682918615886529120475031854806500724778654407474920833961662

 

인터럽트내에서 출력하면 그런건가 싶기도 하고.. 원인을 모르겠다.

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 timer로 gpio 에 연결된 led on/off  (0) 2025.03.26
stm32 sleep mode  (0) 2025.03.10
STM32 timer 사용하기  (0) 2024.12.13
STM32 PWM 으로 LED 점진적으로 깜박이기  (0) 2024.12.13
stm32 gpio ext interrupt 모드  (0) 2024.11.04
Posted by 구차니
embeded/Cortex-M3 STM2024. 12. 13. 14:13

PWM 이랑 거의 비슷하다

TIM2를 사용할 거고, clock source - internal clock

prescaler는 6MHz로 작동해서 6000 으로 하여 1msec 주기의 tick을 사용한다.

Counter Period는 1000 으로 해서 1000 번의 tick이 모이면 (= 1초) timer interrupt가 발생하게 한다.

 

NVIC Settings에서 TIM2 global interrupt를 발생시키게 하고 프로젝트 갱신하고

 

아래의 함수들을 추가하면 끝

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static int pwm_val = 0;
    static int dir = 1;

    if(dir)
    {
        if(pwm_val < 10)
        {
            pwm_val++;
        }
        else
        {
            dir = 0;
            pwm_val--;
        }
    }
    else
    {
        if(pwm_val > 0)
        {
            pwm_val--;
        }
        else
        {
            dir = 1;
            pwm_val++;
        }
    }
    // printf("pwm_val[%d] dir[%d]\n", pwm_val, dir);
    htim3.Instance->CCR1 = pwm_val;
    htim3.Instance->CCR2 = pwm_val;
}

int main(void)
{
    /* USER CODE BEGIN 2 */
    HAL_TIM_Base_Start_IT(&htim2);
    /* USER CODE END 2 */
    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
        /* USER CODE END WHILE */
        /* USER CODE BEGIN 3 */
        HAL_Delay(10);
    }
    /* USER CODE END 3 */
}

[링크 : https://eteo.tistory.com/73]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 sleep mode  (0) 2025.03.10
STM32 float point support 활성화시 %f 출력 NaN  (0) 2025.03.07
STM32 PWM 으로 LED 점진적으로 깜박이기  (0) 2024.12.13
stm32 gpio ext interrupt 모드  (0) 2024.11.04
stm32f103 adc + dma  (0) 2024.11.04
Posted by 구차니
embeded/Cortex-M3 STM2024. 12. 13. 12:39

STM32F103RETx 에서 구현 함.

 

CubeIDE 에서 클럭은 12MHz XTAL로 들어오고 있고

TIM3를 사용해야 하니까 APB1 의 클럭을 보면 된다.

TIM1/TIM8은 APB2에 있네

 

APB1 Timer clocks는 6MHz

 

핀에서 TIM3_CH1 / TIM3_CH2 로 할당하고

Timers - TIM3 에 가서

clock source를 internal clock 으로 바꾸고

channel 1과 channel 2를 PWM Generation CH1/2로 지정해 준다.

그리고 prescaler를 5999 (6000-1) 으로 해주면 6MHz / 6000 이니 1msec 를 1tick으로 쓰고

counter Period를 0~9 까지 10을 묶어서 10msec 마다 1번의 pwm을 발생하게 한다

※ 다르게 표현하면 100Hz PWM clock 으로 지정된다.

그리고 PWM Generation Channel 1/2 에서 Pulse (16 bits value) 에는

counter Period 값을 분모로 하는 값을 지정하면 되고 "Pulse / Counter Period"로 Duty Rate이 지정된다.

 

그러면 50% duty로 100Hz의 PWM 파형이 생성된다.

 

약간의 꽁수로(?) 아래와 같이 해주면

50ms 마다 1씩 변화되어 20번의 증감을 통해 1초 주기로 점멸하는 LED가 생성된다.

50ms 마다 바꾸는 것도 다른 타이머를 이용하면 메인 쓰레드에서 안해도 되니 정확한 타이밍이 될 듯.

    static int pwm_val = 0;
    static int dir = 1;

    if(dir)
    {
      if(pwm_val < 10) pwm_val++;
      else
      {
        dir = 0;
        pwm_val--;
      }
    }
    else
    {
      if(pwm_val > 0) pwm_val--;
      else
      {
        dir = 1;
        pwm_val++;
      }
    }
    // printf("pwm_val[%d] dir[%d]\n", pwm_val, dir);
    htim3.Instance->CCR1 = pwm_val;
    htim3.Instance->CCR2 = pwm_val;
    HAL_Delay(50);

 

[링크 : https://pilimage.tistory.com/23]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

STM32 float point support 활성화시 %f 출력 NaN  (0) 2025.03.07
STM32 timer 사용하기  (0) 2024.12.13
stm32 gpio ext interrupt 모드  (0) 2024.11.04
stm32f103 adc + dma  (0) 2024.11.04
stm32 adc 읽기(1개로 여러 개 채널)  (0) 2024.10.30
Posted by 구차니