stm32小科普

本文讨论了程序中代码容量的不同组成部分,单片机中的时间计算,特别是针对STM32如何通过自定义结构体数组实现GPIO别名,以及不同系统时钟频率对定时器中断的影响。
摘要由CSDN通过智能技术生成

:代码容量

 我的博客:写写感悟

Code :是程序中代码所占字节大小

RO-data :程序中所定义的指令和常量大小

RW-data :程序中已初始化的变量大小

ZI-Data :程序中未初始化的变量大小

ROM(Flash) size = Code+RO-data+RW-data;

RAM size = RW-data+ZI-data

,单片机时间

72MHz: 1秒钟   1/(每次的时间)=   1/(1/72MHz)  =  72 000 000次。

系统时钟频率为72MHz,那么每个时钟周期的时间为1/72MHz = 13.89ns (秒,毫秒,微秒,纳秒)

需要的时钟周期数 = 需要的时间 / 每个时钟周期的时间

需要的时钟周期数 = 11.111us / 13.89ns 约等于 800(799.928)

Period = 800 - 1;  // 自动重装寄存器的值

Prescaler = 0;  // 预分频器的值

配置为11.111us的定时器中断

补充

系统时钟频率为48MHz,那么每个时钟周期的时间为1/48MHz = 20ns

系统时钟频率为168MHz,那么每个时钟周期的时间为1/168MHz = 5.95ns

,stm32自定义io别名怎么建立成数组

首先,我们定义一个结构体,用于描述GPIO:

typedef struct

{

    GPIO_TypeDef* GPIOx;  // GPIO端口

    uint16_t GPIO_Pin;    // GPIO引脚

} MyGPIO_TypeDef;

然后,我们可以定义一个结构体数组,用于存储我们的GPIO别名:

MyGPIO_TypeDef GPIO_MAP[] =

{

    {GPIOA, GPIO_Pin_0},

    {GPIOA, GPIO_Pin_1},

    {GPIOB, GPIO_Pin_0},

    {GPIOB, GPIO_Pin_1},

    // 更多的GPIO别名...

};

在这个例子中,GPIO_MAP[0]就是GPIOA的第0引脚,GPIO_MAP[1]就是GPIOA的第1引脚,

当我们需要使用这些GPIO时,可以直接通过数组索引来访问:

GPIO_SetBits(GPIO_MAP[i].GPIOx, GPIO_MAP[i].GPIO_Pin);

这样,我们就可以通过数组索引来方便地控制GPIO了。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值