Bài 2 mình sẽ giới thiệu System tick Stm32f4

Phần cứng các bạn kết nối led

Stm32 cung cấp bộ timer định thời lên tới 24bit

System tick là bộ định thời timer độc lập với các timer ngoại vi, system tick có độ phân giải tối đa 24bit và không có lệnh đọc thanh ghi từ system tick.

Tôi cho bạn một ví dụ cơ bản để dễ hình dung, nếu bạn muốn làm một đồng hồ đếm thời gian thì bạn sẽ dễ dàng kết hợp lệnh for và delay nhưng khi viết trong chương trình chính thời gian đếm của bạn sẽ không phải là hằng số do mỗi khi bạn thêm một dòng lệnh thì thời gian trong chương trình chính của bạn dãn ra. Trong trường hợp này system tick sẽ phát huy tác dụng, như đã đề cập bên trên system tick là một timer đếm thời gian, mỗi khi cài đặt cho system tick thì system tick sẽ định thời khoảng bao lâu nhảy vào ngắt , con số thời gian này là hằng số, việc nhảy vào ngắt cũng hoàn toàn tự động.

System tick tỏ ra rất hiệu quả trong việc tạo Delay với độ chính xác cao hoặc các đèn led báo hiệu trạng thái cho các mạch ứng dụng

Lập trình time tick tương đối đơn giản ví dụ tôi muốn 1ms nhảy vào ngắt thực hiện tần số f=1khz

SysTick_Config(SystemCoreClock / F)

SysTick_Config(SystemCoreClock / 1000)

ở main.c

#include “stm32f4xx.h”
#include “KEY&LED.h”
//#include “Delay.h”
void delay_ms(__IO uint32_t time);
extern __IO uint32_t TimmingDelay;
#define LED1_Port GPIOB
#define LED1_Pin GPIO_Pin_14
#define LED1_RCC_AHBPeriph RCC_AHB1Periph_GPIOB
void Led_Toggle2(void)
{
GPIO_SetBits(LED1_Port , LED1_Pin);
delay_ms(1000);
GPIO_ResetBits(LED1_Port , LED1_Pin);
delay_ms(1000);
}

int main(void)
{
/* GPIOF Periph clock enable */
RCC_AHB1PeriphClockCmd(LED1_RCC_AHBPeriph | LED2_RCC_AHBPeriph | LED3_RCC_AHBPeriph | LED4_RCC_AHBPeriph, ENABLE);

/* Configure PF6 PF7 PF8 PF9 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = LED1_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(LED1_Port, &GPIO_InitStructure);

SysTick_Config(SystemCoreClock/1000);
//TIM_Config();
while (1)
{
Led_Toggle2();
//Led_Toggle(Read_JOYState());
}
}
void delay_ms(__IO uint32_t time)
{
TimmingDelay = time;
while(TimmingDelay !=0);
}

Trong hàm it.c

__IO uint32_t TimmingDelay;
void SysTick_Handler(void)
{
if(TimmingDelay !=0)
{
TimmingDelay –;
}
}

Mọi liên hệ thắc mắc linhkienagv.com

gmail:buiprohd@gmail.com

 

 

 

Bình luận

Bình luận