STC软件库函数之定时器“一键”定时任意值
本帖最后由 四汐 于 2024-3-21 22:11 编辑前两天发现STC原来也有官方的软件库函数,于是今天就花时间看了一下定时器部分的代码,然后结合手册写了一个这样的“一键”定时任意值的函数。
相对的范围大小,我也算出来了,大家需要自取。(注:最好还是去ISP软件点一点看看误差大不大)
其他定时器设置也可以参考.H文件仿写一个出来。
欢迎大家一起讨论{:4_225:}。
/**
* @name Timer0_config
* @brief 定时器/计数器0配置
* @version 版本:v1.0
* @date 日期:2024-3-21
* @author 作者:汐
* @note 注释:
* Mode, 工作模式 0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 不可屏蔽16位自动重装
* ClkSource 时钟源 0,1: 做定时器, 12T/1T(12T模式可以定时更长); 2: 做计数器
* TIM_Value 装载初值 (u16)(65536UL - (MAIN_Fosc*定时时间s) / (TIM_ClkSource * (TIM_PS+1)))
* 16位 Xms:(MAIN_Fosc / 1000) * X Xus:(MAIN_Fosc / 1000000) * X
* 35,000,000L 1T:0~1ms 12T:0~22ms 1T:0~1,872us 12T:0~22,469us
* 24,000,000L 1T:0~2ms 12T:0~32ms 1T:0~2,739us 12T:0~32,768us
* 22,118,400L 1T:0~2ms 12T:0~35ms 1T:0~2,962us 12T:0~35,555us
* 12,000,000L 1T:0~5ms 12T:0~65ms 1T:0~5,461us 12T:0~65,536us
* 11,059,200L 1T:0~5ms 12T:0~71ms 1T:0~5,925us 12T:0~71,111us
*/
void Timer0_config()
{
TIM_InitTypeDef TIM_InitStructure;
TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; // 工作模式 TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;// 时钟源TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
TIM_InitStructure.TIM_ClkOut = DISABLE; // 是否输出高速脉冲 ENABLE,DISABLE
TIM_InitStructure.TIM_Value = (u16)(65536UL - ((MAIN_Fosc / 1000 /*ms:1000;us:1000000*/) * 1 /*X*/) / 12 /*12T;1T*/); // 装载初值, 1ms
TIM_InitStructure.TIM_PS = 0; // 8位预分频器(n+1), 0~255
TIM_InitStructure.TIM_Run = ENABLE; // 是否初始化后启动定时器 ENABLE,DISABLE
Timer_Inilize(Timer0, &TIM_InitStructure); // 初始化Timer0 Timer0,Timer1,Timer2,Timer3,Timer4
// NVIC_Timer0_Init(ENABLE, Priority_0); // 中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}
STC官方的HAL库 yjawei 发表于 2024-3-23 22:03
STC官方的HAL库
这是我看他们那个软件库改编出来喔 四汐 发表于 2024-3-23 22:37
这是我看他们那个软件库改编出来喔
我还以为是官方出了HAL,你这方法好,减少重复造轮子的次数,以后调用就填想要的定时时间就可以,不用再校对一遍寄存器{:4_250:}
页:
[1]