历史上的今天
今天是:2024年09月28日(星期六)
2021年09月28日 | STM8S(105K4)使用笔记——TIM4的基础配置
2021-09-28 来源:eefocus
0、通过TIM4实现类似STM32的uwTick功能
通过TIM4计时产生中断,每毫秒执行一次uwTick++。
1、设置TIM4分频与自动重装载值
设置TIM4分频
/* 1分频 */
TIM4->PSCR = (uint8_t)0x00;
/* 2分频 */
TIM4->PSCR = (uint8_t)0x01;
/* 4分频 */
TIM4->PSCR = (uint8_t)0x02;
/* 8分频 */
TIM4->PSCR = (uint8_t)0x03;
/* 16分频 */
TIM4->PSCR = (uint8_t)0x04;
/* 32分频 */
TIM4->PSCR = (uint8_t)0x05;
/* 64分频 */
TIM4->PSCR = (uint8_t)0x06;
/* 128分频 */
TIM4->PSCR = (uint8_t)0x07;
设置TIM4自动重装载值
/* TIM4_Period为需要设置的自动重装载值 */
TIM4->ARR = (uint8_t)(TIM4_Period);
TIM4计时触发公式
TIM4_Period= (time * TIM4_Counter_Clock - 1);
TIM4_Period 为设置的自动重装载值
time 为TIM4触发所需时间(s)
TIM4_Counter_Clock 为TIM4频率,等于主频率Fmaster/TIM4分频值(hz)
2、配置TIM4更新中断使能
/* 配置更新中断使能 */
TIM4->IER |= (uint8_t)0x01;
/* 配置更新中断禁止 */
TIM4->IER &= (uint8_t)(~0x00);
推荐在使能更新中断前清除可能产生的更新中断标志
TIM4->SR1 = (uint8_t)(~0x01);
3、使能TIM4
/* 使能TIM4 */
TIM4->CR1 |= (uint8_t)(0x01);
/* 禁用TIM4 */
TIM4->CR1 &= (uint8_t)(~0x01);
/* 使能中断 */
enableInterrupts();
4、设计全局uwTick
#define SYS_MAX_DELAY 0xFFFFFFFFU
__IO uint32_t uwTick;
/**
* @brief auto plus by Time4 , 1 per ms
* ----------------
*/
void SYS_IncTick(void)
{
uwTick++;
}
/**
* @brief get uwtick
* ----------------
*/
uint32_t SYS_GetTick(void)
{
return uwTick;
}
/**
* @brief delay
* ----------------
*/
void SYS_Delay(__IO uint32_t Delay)
{
uint32_t tickstart = SYS_GetTick();
uint32_t wait = Delay;
/* Add a period to guarantee minimum wait */
if (wait < SYS_MAX_DELAY)
{
wait++;
}
while ((SYS_GetTick() - tickstart) < wait)
{
}
}
5、配置软件中断函数
/* 软件中断函数 */
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
SYS_IncTick();
/* 清除更新中断标志 */
TIM4->SR1 = (uint8_t)(~0x01);
}
6、TIM4寄存器简介:
CR控制寄存器

IER中断使能寄存器

SR状态寄存器

EGR事件产生寄存器

CNTR计数器

PSCR预分频寄存器

ARR自动重装载寄存器
史海拾趣
|
下面的是学C++时要注意的。绝对经典!! 1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他 ...… 查看全部问答> |
|
反转式串联开关电源储能滤波电容的计算 开关电源原理与设计(连载七) 1-3-3.反转式串联开关电源储能滤波电容的计算 反转式串联开关电源储能滤波电容参数的计算,与串联式开关电源储能滤波电容的计算方法基本相同。但要注意,即使是在占空比D等于0.5的情况下,滤波电容器充、放电的时间都不相等,滤波电容器充电的时 ...… 查看全部问答> |
|
//--------------------------------------2010.3.25---------------------------------------- 1. Stellaris大全(不断更新) 2. Stellaris系列原理图汇总 3. Stellaris系列实验例程——IAR5.11实验例程 4. Stellaris系列实验例程——Keil实验 ...… 查看全部问答> |
|
我现在在做一个用simenz MC55模块实现通过GPRS发送彩信的项目, 现在有几个问题,请各位帮忙: 1.彩信MMS的具体标准格式是什么? 2.有了彩信文件后怎么打包成PDU? 3.打包成PDU后,已经实现连接了,怎么把彩信发送到一个指定的手机后? 是不是 ...… 查看全部问答> |
|
在用write_string(char*)函数的时候,只有while(1){write_string(char*);}才能在LCD屏上看到字符串输出;如果不加while(1),就看不到。但这样我的程序就不能往其他地方跑了,从而不能执行其他的功能。怎么来实现字符串输出,而我的程序又能在运 ...… 查看全部问答> |
|
MSP430F5xx可以延长电池寿命有广泛的应用前景,提供突破性性能和超低功率、帮助客户开发高级便携应用的全新一代产品 $(\'swf_mf3\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'intern ...… 查看全部问答> |




