STM32F1 โปรแกรมตัวอย่างครับ

  • 49 Replies
  • 924 Views
*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #24 on: May 04, 2021, 04:34:52 pm »
อันนี้แบบตั้งเวลาเปิดไฟได้ เพิ่มสวิทช์ไปอีกสองตัว ใช้ฟังชั่น set_time มาแก้ไขให้เป็นตัวตั้งเวลา แสดงค่าตั้งเวลาไว้ที่บรรทัดที่สอง พอเวลาที่ตั้งตรงกับเวลาที่เดิน ไฟก็จะเปิดแล้วแสดง "ON" ที่จอด้วย
https://www.mediafire.com/file/8lfgs3c3sb2rzn6/ET-STM32F103RB-DS1307-SW1.rar/file

*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #25 on: May 05, 2021, 09:41:37 am »
ต่อไปจะศึกษา timer กัน ไล่ไปเอาตั้งเวลาง่ายๆไปก่อนนะ เดี๋ยวจะมีเอาไฟบ้านมาจับหาความถี่ โดยใช้วงจร zero crossing 4N25 ท่านใดยังไม่มีก็หาอุปกรณ์มาทำเตรียมเอาไว้ก่อนก็ได้ครับ
https://www.mediafire.com/file/1vhacfh7mptddvd/zero_crossing.pdf/file
รู้สึก R3 ผมจะถอดออก ไม่มี
วงจรจับพลัสบวกนะ ไม่ใช่วงจร zero crossing ไม่ใช่เร็คติฟายแบบบริด

*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #26 on: May 06, 2021, 10:02:54 am »
ได้มาแล้ว timer ลองใช้ TIM2 ก่อนนะ ตั้งเวลา 1s ให้สลับหลอด PB9 ลองเอาไปไล่ดูกันครับ
https://www.mediafire.com/file/lhonj4z7lde0qqq/ET-STM32F103RB-TIM-BASE.rar/file

*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #27 on: May 06, 2021, 11:58:47 am »
ลองทำแบบนี้ดู ได้ผลเป็นไง ไฟกระพริบเหมือนกัน แต่จะดับก่อน 1 วิ
Quote
/*## Main loop ###########################################################*/
   while (1)
   {
       HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
        /* Insert delay 100 ms */
       HAL_Delay(2000);
   }

Quote
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   /* Toggle yellow LED */
   //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
}

*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #28 on: May 06, 2021, 02:34:47 pm »
แก้ที่มันอินเตอร์รัพท์ทันทีเลยยังไม่ได้ แก้อย่างนี้แล้วก็ไม่ได้ ช่วยดูกันหน่อยครับ ไล่กันยันในไลบรารี่แล้ว
Quote
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
   /*## STEP 1: Configure RCC peripheral ####################################*/
   __HAL_RCC_TIM2_CLK_ENABLE();

   //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_CLEAR_FLAG(htim, TIM_FLAG_UPDATE);
                //HAL_TIM_PeriodElapsedCallback(htim);
             //}
           //}
   //TIM2->SR &= ~(0x0001);

   /*## STEP 2: Configure NVIC ##############################################*/
   HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(TIM2_IRQn);

   __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);

   if (HAL_TIM_Base_Start_IT(&timHandle) != HAL_OK)
     {
      Error_Handler();
     }
}

*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #29 on: May 06, 2021, 05:35:54 pm »
ได้ตัวอย่างในเน็ตมา ถ้าไม่ใช้อินเตอร์รัพท์ มาอ่านค่า counter มาเปรียบเทียบ ให้ทำงานแบบนี้จะทำงานได้ ขอขอบคุณตัวอย่างในเน็ตที่เขาทำเป็นตัวอย่างมาให้ดูไว้ ณ ที่นี้ด้วยครับ
https://visualgdb.com/tutorials/arm/stm32/timers/hal/

https://www.mediafire.com/file/x232glqf63eau4m/ET-STM32F103RB-TIM-BASE%25282%2529.rar/file

ที่เราทำแบบอินเตอร์รัพท์ มันอินเตอร์รัพท์ทันทีเลยเป็นเพราะมันจะอินเตอร์รัพท์ที่ counter = 0 หรือเปล่า ก็จะอินเตอร์รัพท์ทันทีที่ยังไม่ได้นับเลย อย่างนี้หรือเปล่าครับ

*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #30 on: May 07, 2021, 07:25:41 am »
แก้ไม่ให้มันอินเตอร์รัพท์ทันทีเลยไม่ได้ แต่แก้ไม่ให้มันทำงานในครั้งแรกได้ ลองเอาไปดูกันครับ
https://www.mediafire.com/file/ke4sgu36u7ahf6k/ET-STM32F103RB-TIM-BASE1.rar/file

*

Offline tha

  • *****
  • 2053
    • View Profile
Re: STM32F1 โปรแกรมตัวอย่างครับ
« Reply #31 on: May 07, 2021, 11:42:01 am »
อันนี้ใส่จอ LCD16X4 ด้วย มี Matrix Switch ตั้งค่า Autoreload(Period) ได้ด้วย ดูค่าได้ทั้งค่าที่ตั้งและอ่านค่า Counter มาแสดงด้วย อันนี้จะตั้งค่า Clock = 64MHz นะ เพื่อให้ตั้งค่า Prescaler ได้มากขึ้น มันเป็น 16 บิตใช่ไหม ก็ต้องตั้งให้ไม่เกิน 65535 ใช่มั๊ย ลองเอาไปดูกัน
https://www.mediafire.com/file/eu0mxtwxdjs1lov/ET-STM32F103RB-TIM-BASE2.rar/file