唯客微博客

专注于计算机,嵌入式领域的技术

0%

电容的分类与功能

贴片电容器与其它电容器分类,贴片电容器又称多层陶瓷电容器(积层、叠层),又称贴片电容器、片容器。NPO电容器、X7R电容器、Z5U电容器、Y5V电容器、贴片电容器容易包装,因为体积小,可以节省大量资源,但包装难度高于其他电容器。让我们来看看其他电容器是什么,它们是什么。

电容器分类:

1、铝电解电容

电容范围为0.1uF--22000uF,高脉动电流、长寿命、大容量的最佳选择,广泛应用于电源滤波、解藕等场合。

阅读全文 »

ARM GCC生成固件的压缩、减少和优化大小的几个编译链接参数

1、C++ 编译参数 -ffunction-sections -fdata-sections 和链接参数 --gc-sections

使用-ffunction-sections, -fdata-sections会使compiler为每个function和data item分配独立的section。

使用 --gc-sections会使ld删除没有被使用的section。

就可以压缩固件大小的目的了

阅读全文 »

STM32 使用 CLion 时SystemClock_Config失败

可能原因,来自https://blog.t123yh.xyz:3/index.php/archives/922

故障分析

我们从 OpenOCD 的启动流程(/usr/share/openocd/scripts/target/stm32f4x.cfg)入手分析。首先,ARM Cortex 内核限制 SWD 时钟频率不能超过内核频率的 1/6,而单片机上电后如果不做任何配置,时钟来源为 HSI 的 16MHz,这样 SWD 频率就最高是 2.666MHz。因此,如果不做时钟上的更改,OpenOCD 默认只能使用 2000kHz 的 adapter speed:

1
2
3
4
5
6
7
8
# stm32f4x.cfg line 61-67
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 16MHz, so use F_JTAG = 2MHz
#
# Since we may be running of an RC oscilator, we crank down the speed a
# bit more to be on the safe side. Perhaps superstition, but if are
# running off a crystal, we can run closer to the limit. Note
# that there can be a pretty wide band where things are more or less stable.
adapter speed 2000
阅读全文 »

浮点数的坑

0.0 与 -0.0 不同

在浮点数中,double类型的0.00x0000000000000000表示,-0.00x8000000000000000表示;float类型的0.00x00000000表示,-0.00x80000000表示;

所以printf("%.1f", -0.0)会输出-0.0并不是0.0

1
2
3
4
5
6
7
8
9
10
11
12
13
double d1 = 0.0;
double d2 = -0.0;
float f1 = 0.0f;
float f2 = -0.0f;
unsigned long long* p1 = &d1;
unsigned long long* p2 = &d2;
unsigned int* p3 = &f1;
unsigned int* p4 = &f2;

printf("d1 = %f (0x%016llx)\n", d1, *p1);
printf("d2 = %f (0x%016llx)\n", d2, *p2);
printf("f1 = %f (0x%08x)\n", f1, *p3);
printf("f2 = %f (0x%08x)\n", f2, *p4);
阅读全文 »

C语言类型转换

  • 无符号数小范围转大范围:不改变数据内容
  • 无符号数大范围转小范围:先截断,然后解释
  • 有符号数小范围转大范围:进行符号扩展
  • 有符号数大范围转小范围:先截断,然后解释
  • 有符号与无符号互转:不改变数据内容,改变解释方式
  • 无符号数转有符号大范围:不改变数据内容
  • 无符号数转有符号小范围:先截断,然后解释
  • 有符号数转无符号大范围:先进行符号扩展,然后改变解释方式
  • 有符号数转无符号小范围:先截断,然后解释

int8_t

  • int8_t -> uint8_t: 不改变数据内容,改变解释方式
  • int8_t -> int16_t: 进行符号扩展
  • int8_t -> uint16_t: 先进行符号扩展转为int16_t,然后改变解释方式
  • int8_t -> int32_t: 进行符号扩展
  • int8_t -> uint32_t: 先进行符号扩展转为int32_t,然后改变解释方式

uint8_t

阅读全文 »

什么是复位 单片机复位电路的作用是:使单片机恢复到起始状态,让单片机的程序从头开始执行,运行时钟处于稳定状态、各种寄存器、端口处于初始化状态等等。目的是让单片机能够稳定、正确的从头开始执行程序。

为什么要加复位? 数字电路中寄存器和 RAM 在上电之后默认的状态和数据是不确定的,如果有复位,我们可以把寄存器复位到初始状态,RAM 的数据可以通过复位来触发 RAM 初始化 程序逻辑如果进入了错误的状态,通过复位可以把所有的逻辑状态恢复到初始值,如果没有复位,那么逻辑可能永远运行在错误的状态。(一些简单的IC芯片没有看门狗电路,就需要外部复位)

正常单片机和IC芯片复位都是有一个Reset引脚,给复位引脚通一定时间的高/低电平就可以实现复位

典型的51单片机当RST复位脚持续两个机器周期以上高电平就将复位

像我们常用的STM32F1系列 ,查阅手册得知复位引脚需要持续20us以上的低电平,就可完成复位

阅读全文 »

芯片IC附近放置的电容是多少?1uF、0.1uF、0.01uF如何选?

电容,电容的作用简单来说就是存储电荷。我们都知道在电源中要加电容滤波,在每个芯片的电源脚放置一个0.1uF的电容去耦。但是,有些板子芯片的电源脚旁边的电容是0.1uF的或者0.01uF的,有什么讲究吗?

数字电路要运行稳定可靠,电源一定要“干净”,并且能量补充一定要及时,也就是滤波去耦一定要好。什么是滤波去耦,简单的说就是在芯片不需要电流的时候存储能量,在需要电流的时候又能及时地补充能量。

有读者看到这里会说,这个职责不是DC/DC、LDO的吗?对,在低频的时候它们可以搞定,但高速的数字系统就不一样了。

电容的作用简单来说就是存储电荷。我们都知道在电源中要加电容滤波,在每个芯片的电源脚放置一个0.1uF的电容去耦。但是,有些板子芯片的电源脚旁边的电容是0.1uF的或者0.01uF的,有什么讲究吗?

阅读全文 »

1. 电阻阻值的选择

  1. 通过计算取值,比如反馈电路、分压电路以及限流电路、取样电路可计算取值。
  2. 通过手册取值,使用部分IC的时候,IC手册中会有推荐电路取值,直接使用即可。
  3. 通过经验取值,比如上拉电阻,一般为1K、4.7K、10K、100K等等。再比如485匹配电阻,一般为120Ω;

2. 功耗与封装

选定阻值后,就要确定电路中的电阻满足功耗,比如0603的一般功耗为0.1w,通过公式I2R计算功耗即可;

阅读全文 »