在keil stm32里TIM

作者:佚名    更新日期:2025-06-22
这个事定义了一个结构体变量,这个结构体的成员是定时器的配置寄存器,如果将定时器的基址强制转换为这个结构体指针就可以依靠这个指针操作寄存器了,建议多看看C指针,我给你一个例子

51里面的0x80这个地址是P0口,有两种方法可以让我们写程序的时候直接写P0就可以操作这个寄存器了
1, sfr P0 = 0X80;这个是头文件里面提供的,常用的方式
2, #define P0 (*(unsigned char *)0x80) 这个就是采用指针方式,跟这个类似,这个结构体变量类型就跟这里的unsigned char一样,只是个数据类型.

这个你看下对应的库中,查看下stm32f10x_tim.h中关于这个的定义,里面会有详细实现

在keil stm32里TIM_TimeBaseInitTypeDef是什么意思,是定义一个什么类型的变量~

这个事定义了一个结构体变量,这个结构体的成员是定时器的配置寄存器,如果将定时器的基址强制转换为这个结构体指针就可以依靠这个指针操作寄存器了,建议多看看C指针,我给你一个例子
51里面的0x80这个地址是P0口,有两种方法可以让我们写程序的时候直接写P0就可以操作这个寄存器了
1,
sfr
P0
=
0X80;这个是头文件里面提供的,常用的方式
2,
#define
P0
(*(unsigned
char
*)0x80)
这个就是采用指针方式,跟这个类似,这个结构体变量类型就跟这里的unsigned
char一样,只是个数据类型.

库函数的精髓之一。
首先TIM2是一个结构体,就和我们写C语言的结构体一样,一般情况下,我们定义的结构体会有系统分配内存,放在系统堆栈当中,但是在这里:
#define TIM2 ((TIM_TypeDef *) TIM2_BASE)
定义了一个结构体变量TIM2,并且把这个结构体变量强制放在地址为TIM2_BASE的地方,我们可以查到TIM2_BASE的值为0x40000000,你可以从STM32应用文档中看到TIM2外设对应的地址:

也就是TIM2外设相关控制寄存器都在这个地址范围里面,对TIM2结构体变量成员的操作就等于对TIM2外设寄存器的操作。比如:
TIM2->CR1的地址就是0x40000000,TIM2的CR1寄存器地址也是0x40000000
TIM2->CR2的地址就是0x40000004,TIM2的CR2寄存器地址也是0x40000004
那么对TIM->CR1和TIM2->CR2的读写操作也就是对定时器2的CR1、CR2寄存器的读写操作。