STM32中TIM_TypeDef* TIMx,定义的是什么数据?具体如下:

longyangzhi2022-10-04 11:39:541条回答

STM32中TIM_TypeDef* TIMx,定义的是什么数据?具体如下:
TIM_TimeBaseInit(TIM_TypeDef* TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)这个函数中
TIM_TypeDef* TIMx定义的是什么类型的?假如输入的参数是TIM2,TIM2对应的是外设地址?被搞晕了,

已提交,审核后显示!提交回复

共1条回复
christy305 共回答了21个问题 | 采纳率90.5%
库函数的精髓之一.
首先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寄存器的读写操作.
1年前

相关推荐

STM32 疑惑,#ifdef _TIM2#define TIM2 ((TIM_TypeDef *) TIM2_BASE
STM32 疑惑,
#ifdef _TIM2
#define TIM2 ((TIM_TypeDef *) TIM2_BASE)
#endif /*_TIM2 */
#ifdef _TIM2
EXT TIM_TypeDef *TIM2;
#endif /*_TIM2 */
乌云珠20051年前1
北纬十八度ww 共回答了17个问题 | 采纳率88.2%
最前面定义TIM2,这里TIM2是一个结构体指针.((TIM_TypeDef*)TIM2_BASE)这意思是说 把TIM2_BASE这个地址强制转化为TIM_TypeDef结构体指针.看下面的,这个就表示声明一个TIM_TypeDef结构体指针TIM2,声明前面EXT在STM32里...
链表算法设计(1)设循环单链表中结点的类型定义若下: typedef struct LNode{ int data; s
链表算法设计
(1)设循环单链表中结点的类型定义若下:
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
假设有一个不带头结点的循环单链表,其长度大于1,R为它的尾指针,指向循环单链表的最后一个结点。编写算法在链表中删除R结点的直接前驱结点(删除后只剩一个结点的情况要加以考虑)
要求采用尾插法先创建一个循环单链表,然后输出该链表的各结点的数据域值,接下来编写算法删除R结点的前驱结点,最后输出删除结点后的链表的各结点的数据域值。
(2)设单链表中结点的类型定义若下:
typedef struct LNode{
char data;
struct LNode *next;
}LNode;
已知一个带有头结点的单链表中的数据元素包含3类字符,即字母字符、数字字符和其他字符,编写算法构造3个带头结点的循环单链表,使每个循环单链表中只包含同一类的字符,且利用原表中的结点空间作为这3个链表的结点空间,头结点可另辟空间。
要求先创建一个带头结点的单链表,然后输出该链表的各结点的数据域值,接下来编写算法将单链表L拆分成三个单链表,最后输出这三个单链表中各结点的数据域值。

虎忍1年前1
九天化石 共回答了16个问题 | 采纳率93.8%
(1)主界面采用对话框模式,通过选择控件数字按键的控制及关联,并实现普通的加、减、乘、除运算;
(2)通过控件控制关联,实现(反)正弦、(反)正切、(反)余弦、开方、指数、对数的计算;
(3)通过控件控制关联,添加角度与弧度两种数字表示方式。
typedef{chinese,english} subject; subject a; a有什么用?
蝎子13仟1年前1
weixiisme 共回答了23个问题 | 采纳率95.7%
取消句子独立性
在一本数据结构上有这样一段“typedef int datatype;typedef struct node{datat
在一本数据结构上有这样一段“
typedef int datatype;
typedef struct node
{datatype data;
struct node * next;
}linklist;
linklist *head,*p;
如果node是作者给这个结构体起的名字,那后面的linklist又是什么意思呢?
梦的天下1年前1
海外买家ee 共回答了31个问题 | 采纳率83.9%
node 是结构体名,而linklist是变量名,用node定义linklist,像int a中的int与a的关系一样
c语言求改错#include typedef struct Birthday{short year;short mont
c语言求改错
#include
typedef struct Birthday
{
short year;
short month;
short day;
}Bir;
typedef struct Student
{
char name[10];
long ID;
Bir birthday;
float height;
float weight;
}STU;
STU MyClass[5];
void StudyStructMem()
{
printf("tsizetAddr0tAddr1tAddr2tAddr3tAddr4tAddr5n");
printf("Bithday:%dt",sizeof(Bir));
printf("%xt%xt%xt%xn",&Bir,&Bir.year,&Bir.month,&Bir.day);
printf("Student:%dt",sizeof(STU));
printf("%xt%xt%xt%xt%xt%xn",&STU,&STU.name,&STU.ID,&STU.Br,&STU.height,&STU.weight);
printf("MyClass:%dt",sizeof(MyClass));
printf("%xt%xt%xt%xt%xt%xn",&MyClass,&MyClass[0],&MyClass[1],&MyClass[2],&MyClass[3],&MyClass[4]);
}
void main()
{
StudyStructMem();
}
C:UsersIdeaPadDesktopProject8eight1.c(27) :error C2275:'Bir' :illegal use of this type as an expression
C:UsersIdeaPadDesktopProject8eight1.c(9) :see declaration of 'Bir'
C:UsersIdeaPadDesktopProject8eight1.c(29) :error C2275:'STU' :illegal use of this type as an expression
C:UsersIdeaPadDesktopProject8eight1.c(18) :see declaration of 'STU'
rr孤姬1年前1
做女人真难啊 共回答了14个问题 | 采纳率78.6%
#include

typedef struct Birthday
{
short year;
short month;
short day;
}Bir;
typedef struct Student
{
char name[10];
long ID;
Bir birthday;
float height;
float weight;
}STU;
STU MyClass[5];
void StudyStructMem()
{
printf("tsizetAddr0tAddr1tAddr2tAddr3tAddr4tAddr5n");
printf("Bithday:%dt",sizeof(Bir));
printf("%xt%xt%xt%xn", Bir, Bir.year, Bir.month, Bir.day);//Bir是类型 不能取地址
printf("Student:%dt",sizeof(STU));
printf("%xt%xt%xt%xt%xt%xn", STU, STU.name, STU.ID, STU.Br, STU.height, STU.weight);//STU是类型 不能作为取地址 变量输出
printf("MyClass:%dt",sizeof(MyClass));
printf("%xt%xt%xt%xt%xt%xn", MyClass, MyClass[0], MyClass[1], MyClass[2], MyClass[3], MyClass[4]);
}
数据结构 顶点的定义typedef struct Vnode{ //顶点结点的结构VertexType vertex;
数据结构 顶点的定义
typedef struct Vnode
{ //顶点结点的结构
VertexType vertex; //顶点信息
EdgeNode *link; //指向第一条依附该顶点的弧
} AdjList[MAX_VERTEX_NUM];
AdjList[MAX_VERTEX_NUM]是什么意思?
39888581年前1
hapyrabbit 共回答了20个问题 | 采纳率85%
就是定义了一个该顶点的一个数组,它的每个元素都是一个顶点的结构体
在学STM32.不懂.关于GPIO_TypeDef
在学STM32.不懂.关于GPIO_TypeDef
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
回到 GPIO_TypeDef 这段代码,这个代码用 typedef 关键字声明了名为 GPIO_TypeDef 的结构体类型,结构体内又定义了 7 个 __IO uint32_t 类型的变量.这些变量每个都为 32 位,也就是每个变量占内存空间 4 个字节.在 c 语言中,结构体内变量的存储空间是连续的,也就是说假如我们定义了一个 GPIO_TypeDef ,这个结构体的首地址(变量 CRL 的地址)若为 0x4001 1000,那么结构体中第二个变量(CRH)的地址即为 0x4001 1000 +0x04 ,加上的这个 0x04 ,正是代表 4 个字节地址的偏移量.
“加上的这个 0x04 ,正是代表 4 个字节地址的偏移量”
为什么是0x04?这个为什么能表示4个字节地址的偏移量?一个字节只用一位来表示?
看懂了~上面的问题懂了.
定义以后如何处理?直接对需要操作的寄存器赋值?
随便举一个例子~多简单的例子都可以
k55057451年前1
魂似秋千索 共回答了15个问题 | 采纳率100%
类型定义好以后,这个GPIO_TypeDef就像char,int,long一样使用了,先定义变量,再给变量赋值.
例如:
GPIO_TypeDef gpioa; //先定义变量gpioa
gpioa.CRL = 0; //给变量中的结构元素赋值.
gpioa.CRH = 1;
.
用的时候,gpioa.CRL等就是个 __IO uint32_t类型的变量
设typedef float REAL;则REAL是
设typedef float REAL;则REAL是
A 变量名 B 常量名 C 函数名 D 类型名
血色漂泊1年前1
nosun 共回答了19个问题 | 采纳率84.2%
REAL 就是float的别名,因此是D类型名
英语翻译typedef pair Pair;set area_set;area_set.insert(Pair(a,i)
英语翻译
typedef pair Pair;
set area_set;
area_set.insert(Pair(a,i))
set::iterator it_set = area_set.begin();
it_set++;
我认为可能是这样翻译,但是后面翻译不出来
Dictionary area_set = new Dictionary();
area_set.Add(a,i);
后面翻译不出来了
后面应该是
int it_set=0;
it_set++;
(*it_set).second 那这句应该?
silae1年前1
mulanxueyan 共回答了20个问题 | 采纳率95%
C#应该用foreach来替换iterator.
foreach (DictionaryEntry Pair in area_set)
{
Console.WriteLine("{0} = {1} ", Pair.Key, Pair.Value);
}
Pair.Key就相当于.first;
Pair.Value就相当于.second.
27.若有结构类型定义"typedef struct test{int x,y[2];}TEST;",则以下声明中正确的
27.若有结构类型定义"typedef struct test{int x,y[2];}TEST;",则以下声明中正确的是 _________
27.若有结构类型定义"typedef struct test{int x,y[2];}TEST;",则以下声明中正确的是
_________ .
A.struct test x:B.struct x; C.test x;D.struct TEST x;
为什么A?不是D
MrO酷洛桠1年前1
马路笨笨 共回答了14个问题 | 采纳率78.6%
答案为:C
A错:最后应为分号
B错:缺少结构体名
D错:TEST 已经被定义为类型名,不必再加struct
c++typedef的问题若有如下的定义语句:typedef char PCHAR[5];则下列语句正确的是 【10】
c++typedef的问题
若有如下的定义语句:typedef char PCHAR[5];则下列语句正确的是 【10】 . A.PCHAR s="abcd"; B.PCHAR s='a'; C.PCHAR s[5]='a'; D.PCHAR s="Hello";
谢谢
songerlk5201年前1
morelike 共回答了17个问题 | 采纳率100%
正确答案”a 其他答案B:无法从“char”转换为“PCHAR” C:无法从“char”转换为“PCHAR [5]” D:数组界限溢出(越界)
大一c语言问题3.以下所列对结构类型变量td1的声明中,错误的是 。 A.typedef struct aa B.#de
大一c语言问题
3.以下所列对结构类型变量td1的声明中,错误的是 。
A.typedef struct aa B.#define AA struct aa
{ int n;float m;}AA; AA{ int n; float m;}td1;
AA td1;
C.struct D.struct
{ int n; float m;}aa; { int n; float m;}td1;
struct aa td1;
啊笯1年前1
我要提问呀 共回答了25个问题 | 采纳率96%
c是错的,aa已经是定义出的一个结构体变量。
程序1.设typedef struct{char id[10];float
程序1.设typedef struct{char id[10];float
1.设typedef struct{char id[10];float score}STU;则sizeof(STU)值是【 】。
A.14   B.16  C.5   D.12
2. 设typedef union{int i;char c;float x}TEST;则sizeof(TEST)值是【 】。
A.4  B.7 C.6  D.5
lliucheng1年前1
浮生于世上 共回答了16个问题 | 采纳率87.5%
1.A结构体在内存中占的字节数,应该等于所有元素所占字节数的和 sizeof(STU)=sizeof(char)*10+sizeof(float)=1*10+42.A联合结构在内存中占的字节数,应该等于他的占最大字节数的那个元素占的字节数我们可以发现,占...
将La和Lb合并成Lc合并问题#include "stdio.h"typedef struct{int elem;}Li
将La和Lb合并成Lc合并问题
#include "stdio.h"
typedef struct{
int elem;
}List;
void MergeList(List La ,List Lb ,List &Lc ){
int i,j,k;
InitList(Lc);
i=j=1;k=0;
La_len = ListLength(La);Lb_len = ListLength(Lb);
while ((i
421978691年前1
一贯亲手 共回答了14个问题 | 采纳率85.7%
#include
typedef struct
{
x09int *elem;
x09int length;
x09int listsize;
}SqList;
void InitList(SqList *L)//初始化函数
{
x09L->elem=(int*)malloc(100*sizeof(int));
x09if(!(L->elem))
x09x09exit(0);
x09L->length=0;
x09L->listsize=100;
}
int ListInsert(SqList *L,int i,int e)
{
x09int newbase,*q,*p;
x09if(iL->length+1)
x09x09return 0;
x09if(L->length>=L->listsize)
x09{
x09x09newbase=(int*)realloc(L->elem,(L->listsize+10)*sizeof(int));
x09x09if(!newbase)
x09x09x09exit(0);
x09x09L->elem=newbase;
x09x09L->listsize+=10;
x09}
x09q=&(L->elem[i-1]);
x09for(p=&(L->elem[L->length-1]);p>=q;--p)
x09{
x09x09*(p+1)=*p;
x09}
x09*q=e;
x09++L->length;
}
int GetElem(SqList L,int i,int *e)
{
x09if(iL.length)
x09x09return 0;
x09else
x09{
x09x09*e=L.elem[i-1];
x09x09return 1;
x09}
}
void MergeList(SqList La,SqList Lb,SqList *Lc)
{
x09int i=1,j=1,k=0;
x09int ai,bj;
x09int La_len=La.length,Lb_len=Lb.length;
x09while((i
C语言,下列有关typedef的叙述不正确的是
C语言,下列有关typedef的叙述不正确的是
A、用typedef可以定义各种类型名,但不能用来定义变量
B、typedef和#define都是在预编译时处理的
C、用typedef只是将已存在的类型用一个新的标识符来代表
D、使用typedef有利于程序的通用和移植
小小肥1年前1
ylong888 共回答了13个问题 | 采纳率92.3%
B——typedef是在编译期间执行解释,#define是在预编译期间执行文本替换
c语言设计有以下语句,下面描述中正确的是_____。typedef struct S{ int g; char h;}
c语言设计
有以下语句,下面描述中正确的是_____。
typedef struct S
{ int g; char h;} T;
A. 可用S定义结构体变量 B. 可用T定义结构体变量
C. S是struct类型的变量 D. T是struct S类型的变量
bravecheng1年前1
noloveup 共回答了11个问题 | 采纳率100%
正确的是B,请查看谭浩强C语言第二版 294页关于 typedef 说明。
Typedef struct S

int g;
char h;
}T;
typedef 声明新的类型名,也就是定义一个新的数据类型。如果你看除去 typedef ,T就变成了声明一个结构体类型S:
struct S

int g;
char h;
};
加上typedef,T之后,这个T就等效于 struct S,是一个结构体类型。也就是说,typedef 只是将 struct S 另定义为一种新的数据类型T。
再看答案:
A 错误, S 不可以定义结构体变量,要加上 struct ,也就是 struct S + 结构体变量
B 正确, 因为T 等效于 struct S.
C 错误 S 不是变量,要和 struct 一起才有意义。
D 错误 T不是变量,是一种新的类型,等效于 struct S.

大家在问