STM32C8T6 内部时钟定时器中断学习

前置知识

 流程图

 定时器溢出频率公式

内部时钟PSC为72MHz

主要用到的库函数

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定时器2的时钟
TIM_InternalClockConfig(TIM2);//选择定时器为内部时钟模式
/*
    选择模式的函数有
    void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
    void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
    void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);
    void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);
    void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
    对应流程图的几个模式
*/
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);//初始化时基单元
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
/*
在函数TIM_TimeBaseInit()中的最后一句代码
TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter;
会让单片机上机后立刻进入一次中断,所以用这句代码清除中断标志位
*/
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中断,更新中断到NVIC的通道
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置抢占优先级
NVIC_Init(&NVIC_InitStruct);
TIM_Cmd(TIM2,ENABLE);//开启定时器
void TIM2_IRQHandler();//中断函数

主要代码

main.c

int main(void)
{
	
	OLED_Init();
	Timer2_Init();
	while (1)
	{
		OLED_ShowString(1, 1, "Num:");
		OLED_ShowNum(1,5,num,5);
	
	}
}


void TIM2_IRQHandler()//在Start文件中的startup文件可以找到中断函数名
{
	if(TIM_GetITStatus(TIM2,TIM_IT_Update))
	{
		num++;
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除标志位
	}
}

Timer2_Init.c

void Timer2_Init()
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	TIM_InternalClockConfig(TIM2);
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1;
	TIM_TimeBaseInitStruct.TIM_CounterMode= TIM_CounterMode_Up  ;
	TIM_TimeBaseInitStruct.TIM_Period =10000-1;
	TIM_TimeBaseInitStruct.TIM_Prescaler=7200-1 ;
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0 ;
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	TIM_ClearFlag(TIM2,TIM_FLAG_Update);
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn ;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE ;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2 ;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority= 1;
	
	NVIC_Init(&NVIC_InitStruct);
	TIM_Cmd(TIM2,ENABLE);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STN32C8T6是一款32位ARM Cortex-M3内核的微控制器,其引脚定义如下: 1. PA0-PA15:GPIO口/模拟输入 2. PB0-PB15:GPIO口/模拟输入 3. PC0-PC15:GPIO口/模拟输入 4. PD0-PD15:GPIO口/模拟输入 5. PE0-PE15:GPIO口/模拟输入 6. PF0-PF15:GPIO口/模拟输入 7. PG0-PG15:GPIO口/模拟输入 8. PH0-PH15:GPIO口/模拟输入 9. PI0-PI15:GPIO口/模拟输入 10. PJ0-PJ15:GPIO口/模拟输入 11. PK0-PK15:GPIO口/模拟输入 12. PL0-PL15:GPIO口/模拟输入 13. PM0-PM15:GPIO口/模拟输入 14. PN0-PN15:GPIO口/模拟输入 15. PO0-PO15:GPIO口/模拟输入 16. PP0-PP15:GPIO口/模拟输入 17. PQ0-PQ15:GPIO口/模拟输入 18. PR0-PR15:GPIO口/模拟输入 19. PS0-PS15:GPIO口/模拟输入 20. PT0-PT15:GPIO口/模拟输入 21. PU0-PU15:GPIO口/模拟输入 22. PV0-PV15:GPIO口/模拟输入 23. PW0-PW15:GPIO口/模拟输入 24. PX0-PX15:GPIO口/模拟输入 25. PY0-PY15:GPIO口/模拟输入 26. PZ0-PZ15:GPIO口/模拟输入 27. VSS1:电源接地 28. VDD:电源正极 29. BOOT0(脚踩下为选中芯片内部Bootloader,松开为运行用户程序) 30. NRST:复位引脚 31. VSSA:模拟电源接地 32. VREF+:模拟电源正极 33. VREF-:模拟电源负极 34. ADC1-IN0:模拟输入 35. ADC1-IN1:模拟输入 36. ADC1-IN2:模拟输入 37. ADC1-IN3:模拟输入 38. ADC1-IN4:模拟输入 39. ADC1-IN5:模拟输入 40. ADC1-IN6:模拟输入 41. ADC1-IN7:模拟输入 42. ADC1-IN8:模拟输入 43. ADC1-IN9:模拟输入 44. ADC1-IN10:模拟输入 45. ADC1-IN11:模拟输入 46. ADC1-IN12:模拟输入 47. ADC1-IN13:模拟输入 48. ADC1-IN14:模拟输入 49. ADC1-IN15:模拟输入 50. USB_DM:USB数据负线 51. USB_DP:USB数据正线 52. VBUS:USB电源输入 53. ID:USB设备模式选择 54. OSC_IN:外部晶振输入 55. OSC_OUT:外部晶振输出 56. VSS2:电源接地 57. VDDA:模拟电源正极 58. JTDO:JTAG调试输出 59. JTRST:JTAG调试复位 60. JTCK:JTAG调试时钟 61. JTMS:JTAG调试模式选择 62. SWDIO:SWD调试数据线 63. SWCLK:SWD调试时钟线 64. VSS3:电源接地 其中,GPIO口可以配置为输入、输出、复用功能,模拟输入口可以用于连接传感器等外围模拟电路,USB接口可用于连接PC进行数据传输和调试,JTAG/SWD调试接口用于调试和烧录程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值