今天捣鼓定时器点灯,用的FG那个腿上的灯。
原理图:
代码:主程序:
#include "lks32mc03x_lib.h"
#include "hardware_init.h"
#include "delay.h"
/*******************************************************************************
º¯ÊýÃû³Æ£º int main(void)
¹¦ÄÜÃèÊö£º Ö÷³ÌÐòÈë¿Ú
ÊäÈë²ÎÊý£º ÎÞ
Êä³ö²ÎÊý£º ÎÞ
·µ »Ø Öµ£º ÎÞ
ÆäËü˵Ã÷£º ʹÓÃUTIMER1_CH1²¶»ñģʽ£¬²¶»ñdemo°åOC£¨P1.5£©Òý½ÅµÄϽµÑØÐźŲ¢·×ªLED2
£¨ P0.9£©µÄµçƽ½øÐÐָʾ£¬²¢»ñÈ¡OCÐźÅϽµÑØʱUTIMER1_CH1²¶»ñÖµ¡£
ÔËÐÐЧ¹û£º ³ÌÐòÉÕ¼ÁèŸLKS32MC033H6P8×îСϵͳ°å£¬Ê¹ÓÃʾ²¨Æ÷²âÁ¿P1.5ºÍP0.9¿Ú²¨ÐΣ¬
µ±P1.5Óɸߵçƽ±äΪµÍµçƽʱ£¬P1.5²¶»ñµ½Ï½µÑØÐźţ¬´Ëʱ½øÈ벶»ñÖжϣ¬
P0.9µçƽ½øÐÐÒ»´Î·×ª£¬´ËʱʹÓÃDebug¶ÁÈ¡²¶»ñÖµ¡£
ÐÞ¸ÄÈÕÆÚ °æ±¾ºÅ ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ
-----------------------------------------------------------------------------
2022/4/14 V1.0 HuangMG ´´½¨
*******************************************************************************/
int main(void)
{
Hardware_init(); /* Ó²¼þ³õʼ»¯ */
for (;;)
{
//Invers_GPIO(GPIO1 , GPIO_Pin_4);
delay_ms(1000);
}
}
/************************ (C) COPYRIGHT LINKO SEMICONDUCTOR **********************/
/* ------------------------------END OF FILE------------------------------------ */
初始化程序:
void Hardware_init(void)
{
__disable_irq(); /* ¹Ø±ÕÖÐ¶Ï ÖжÏ×Ü¿ª¹Ø */
SYS_WR_PROTECT = 0x7a83; /* ¿ªÆôдʹÄÜ*/
IWDG_DISABLE(); /* ¹Ø±Õ¶ÀÁ¢¿´ÃŹ·Ê¹ÄÜ*/
FLASH_CFG |= 0x00080000; /* FLASH Ԥȡ¼ÓËÙʹÄÜ*/
delay_init(48); /* ÑÓʱº¯Êý³õʼ»¯Ê±ÖÓ48MHz*/
GPIO_init(); /* GPIO³õʼ»¯ */
UTimer_init(); /* UTimer_init³õʼ»¯ */
delay_us(100); /* ÑÓʱµÈ´ýÓ²¼þ³õʼ»¯Îȶ¨ */
NVIC_EnableIRQ(TIMER1_IRQn); /* ʹÄÜTIMER1_IRQnÍⲿÖжÏ*/
NVIC_SetPriority(TIMER1_IRQn, 0); /* TIMER1_IRQnÍⲿÖжÏÓÅÏȼ¶ÉèÖÃΪ0*/
__enable_irq(); /* ¿ªÆô×ÜÖÐ¶Ï */
}
void GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
/* P0.9 LED2*/
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; /*Êä³öģʽ*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; /*Pin9*/
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; /*ÉÏÀ¹¦ÄÜ*/
GPIO_Init(GPIO1, &GPIO_InitStruct);
}
void UTimer_init(void)
{
TIM_TimerInitTypeDef TIM_InitStruct;
TIM_TimerStrutInit(&TIM_InitStruct); /* Timer½á¹¹Ìå±äÁ¿³õʼ»¯ */
TIM_InitStruct.CLK_DIV = TIM_Clk_Div1; /* ÉèÖÃTimerÄ£¿éÊý¾Ý·ÖƵϵÊý */
TIM_InitStruct.CH1_MODE = TIMER_OPMode_CAP; /* ÉèÖÃTimer CH0Ϊ²¶»ñģʽ*/
TIM_InitStruct.CH1_FE_CAP_EN = ENABLE; /* ʹÄÜTimerͨµÀ0ϽµÑز¶»ñ*/
TIM_InitStruct.CH1_RE_CAP_EN = DISABLE; /* ¹Ø±ÕTimerͨµÀ0ÉÏÉýÑز¶»ñ*/
TIM_InitStruct.SRC1 = TIM_SRC1_1; /* ²¶»ñģʽͨµÀ1ÐźÅÀ´Ô´ÓÚTimerͨµÀ1µÄÊäÈëÐźÅ*/
TIM_InitStruct.CAP1_CLR_EN = ENABLE; /* µ±·¢ÉúCAP1²¶»ñʼþʱ£¬ÇåÁãTimer¼ÆÊýÆ÷*/
TIM_InitStruct.TH = 48000; /* ÉèÖüÆÊýÆ÷¼ÆÊýÄ£Öµ */
TIM_InitStruct.FLT = 10; /* ͨµÀ 0/1 ÐźÅÂ˲¨¿í¶ÈÑ¡Ôñ£¬0-255 */
TIM_InitStruct.IE = TIM_IRQ_IE_ZC; /* ʹÄÜTimerÄ£¿éCH0²¶»ñÖÐ¶Ï */
TIM_TimerInit(TIMER1, &TIM_InitStruct);
TIM_TimerCmd(TIMER1,ENABLE); /* Ä£¿éʹÄÜ */
}
中断函数:
s16 Cnt = 0;
TIM_TimerInitTypeDef TIM_InitStruct;
void TIMER1_IRQHandler(void)
{
if (TIM_GetIRQFlag(TIMER1,TIM_IRQ_IF_ZC)) //ÅжÏUTimer1µÄCH1ÊÇ·ñ·¢Éú²¶»ñÖжÏ
{
TIM_ClearIRQFlag(TIMER1,TIM_IRQ_IF_ZC); //Çå³ýUTimer1ͨµÀ1²¶»ñÖжϱê־λ
if(Cnt>=1000)
{
Cnt=0;
Invers_GPIO(GPIO1 , GPIO_Pin_4); /*LED2µçƽ·×ª*/
}
Cnt++;
//Invers_GPIO(GPIO1 , GPIO_Pin_4); /*LED2µçƽ·×ª*/
//Utimer_Cmp_Value = TIM_Timer_GetCMPT1(TIMER1);/*»ñÈ¡²¶»ñʱ¼ÆÊýÆ÷¼ÆÊýÖµ*/
TIM_InitStruct.TH = 48000;
}
}
效果图:
|