Sunday, August 16, 2015

Bài 6: làm việc với Timer 4 của stm8

Trong stm8 thì Timer 4 là timer đơn giản nhất. Nó tương tự với timer trong 8051.
Nó là 1 bộ timer 8 bit  có 1 sự kiện ngắt duy nhất  là overflow/update.
Nó chỉ đếm theo chiều tăng lên.
Các lệnh làm việc cơ bản gồm có:
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 10);//
-- TIM4_PRESCALER_128 : là tần số chia với F_Master. ở chế độ thông thường không cài đặt gì thì F_Master =2Mhz. Vậy timrer 4 sẽ hoạt động tại tần số 15625 Hz.
-- 10 : là số đếm .
 /* xóa cờ update */
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
 /*kích hoạt ngắt update */
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  /* kích hoạt ngắt */
  enableInterrupts();
  /* kích hoạt timer 4 */
  TIM4_Cmd(ENABLE);
như các bạn thấy đấy nó làm việc rất đơn giản phải không ? Nhưng sự đơn giản của nó lại 1 sự tiện lợi trong các ứng dụng đo thời gian hoặc tần số.
   INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
  /* Cleat Interrupt Pending bit */
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);

}
Đây là code của hàm ngắt timer4 .Câu lệnh quan trọng là câu lênh xóa cơ ngắt update.
Sau đây là 1 mã code mẫu ho các bạn tham khảo :
Yêu cầu : Dùng timer 4 để tạo độ trễ thời gian đảo trạng thái chân PC7
#include "stm8s.h"
    INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
  GPIO_WriteReverse(GPIOC,GPIO_PIN_7);
  /* Cleat Interrupt Pending bit */
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);

}

void main()
{
    GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_OUT_PP_HIGH_FAST);
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 100);
  /* Clear TIM4 update flag */
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  /* Enable update interrupt */
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  
  /* enable interrupts */
  enableInterrupts();

  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);
while(1)
{
}
}
#ifdef USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param file: pointer to the source file name
  * @param line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)

  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif
Tới đây là các bạn đã có đầy đủ công cụ cơ bản để có thể làm việc với stm8 như 1 vi điều khiển thông thường với GPIO, ngắt ngoài, Timer.
Trong thời gian tới nếu có thời gian tôi sẽ viết tiếp về I2C, SPI, giao tiếp SDcard, Inputcapte .v.v.


Mời các bạn tham gia thảo luận tại :

No comments:

Post a Comment