脚本宝典收集整理的这篇文章主要介绍了【单片机】CH32V103C8T6定时器3程序实验,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
代码功能:每隔1毫秒进入一次定时器中断。
每隔1秒串口打印一次数据。
time.c
#include "time.h" #include "ch32v10x.h" #include <stdio.h> int w = 0; void TIM3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); /******************************************************************************* * Function Name : TIM3_Int_Init * Description : 定时器3初始化,因为赫兹是频率的单位,周期=1÷频率,从单位看:秒=1÷赫兹。 * 7199:10khz,1÷10000hz(秒)=1÷10000hz(秒)* 1000000us = 100us 进行一次计数。 * arr = 10,表示计数10次产生一次定时器中断,10个100us,即1ms进一次中断函数。 * Input : None * Return : None *******************************************************************************/ void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; /*使能TIM3时钟*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /*指定下次更新事件时要加载到活动自动重新加载寄存器中的周期值。*/ TIM_TimeBaseStructure.TIM_Period = arr; /*指定用于划分TIM时钟的预分频器值。*/ TIM_TimeBaseStructure.TIM_Prescaler =psc; /*时钟分频因子*/ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /*TIM计数模式,向上计数模式*/ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*根据指定的参数初始化TIMx的时间基数单位*/ TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /*使能TIM3中断,允许更新中断*/ TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); /*初始化TIM NVIC,设置中断优先级分组*/ /*TIM3中断*/ NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; /*设置抢占优先级0*/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /*设置响应优先级3*/ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /*使能通道1中断*/ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM3, ENABLE); } void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3中断是否发生。 { TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除TIM3的中断挂起位。 w++; if(w> 1000) { w= 0; printf("Enter interruptn"); } } }
main.c初始化
#include "time.h" /******************************************************************************* * Function Name : main * Description : Main program. * Input : None * Return : None *******************************************************************************/ int main(void) { u8 j=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Delay_Init(); USART_Printf_Init(115200); TIM3_Int_Init(4999,7199); printf("SystemClk:%drn",SystemCoreClock); while(1); }
以上是脚本宝典为你收集整理的【单片机】CH32V103C8T6定时器3程序实验全部内容,希望文章能够帮你解决【单片机】CH32V103C8T6定时器3程序实验所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。