雅特力官方FAQ大集合(共140个),听说可以学到很多
[复制链接]
更新日期:2023年6月15日
有工程师看了雅特力的官方FAQ,感觉可以学到很多内容,特此和官方申请,搬运一下。目前官方共放出140个FAQ,容我慢慢搬运。
FAQ0001:当用户安装多个不同版本 IAR 时,IAR_AT32MCU_AddOn 无法自动安装 Pack 文件
Answer:因用户未使用管理员身份运行程序,IAR_AT32MCU_AddOn 自动搜索时,只能枚举出一个安装路
径,这会导致不是用户需要安装 pack 文件的 IAR 版本路径
解决步骤:
1. 使用管理员身份运行程序。
2. 需手动选择需要安装 pack 文件的 IAR 路径,请特别注意手动选择时,不要选择错误的路径,不然安装完
成后,IAR 仍然无法识别 AT32 型号。(选择到目录下有 arm 和 common 两个文件)
类型:开发工具
适用型号:AT32 全系列
FAQ0002:使用 ISP 串口下载时,偶尔会卡死,卡死之后电脑无法释放串口,需重启 PC 后才能正常使用 ISP
Answer:根据问题复现时的现象以及代码调试,确定为卡死在 windows 操作系统的 USB 转串口设备的驱动中,也就是 USB 转串口设备出了问题。卡死时使用 USB 转串口设备,USB 转串口芯片为 PX-2303。PX-2303芯片不稳定,且盗版较多,卡死现象很多,如果遇到拔出设备仍然不能释放串口,只能重启 PC。FT232、CH340 稳定性较好,其中 FT232 稳定性最好,价格更高。并且这也跟 USB 转串口设备电气特性有关,例如:廉价产品的电源无滤波电容、信号线无 EMC 滤波措施等,同样会引起卡死问题
解决方法:建议使用 FT232、CH340 芯片的 USB 转串口设备,或者使用 PX-2303 芯片的电气特性较好的正规产品。
类型:开发工具
适用型号:AT32 全系列
FAQ0003:如何使用 Keil IDE 环境中生成汇编文档
Answer:在 user 配置栏增加如下内容:fromelf.exe --text -a -c --output=@L_asm.txt "!L"
类型:开发工具
适用型号:AT32 全系列
FAQ0004:如何在 Keil 中将函数或变量编译到指定地址
Answer:实现方法如下
方式一: attribute 属性
1. 将函数加载到指定位置
示例将 main.c 中的 delay 函数指定到 0x08020000 地址,可以在 c 文件中函数的定义处指定 delay 函数。
void delay(void) __attribute__ ((section(".ARM.__at_0x08020000")));
2. 将数组加载到指定位置
int Temp[] __attribute__ ((section(".ARM.__at_0x08020000"))) = {0x1, 0x2};
3. 将变量加载到指定位置以 AT32F403AVGT7 为例:
示例可以直接将 c 代码修改如下:
const int Temp __attribute__ ((section(".ARM.__at_0x08020000"))) = 10; // RO
int Temp __attribute__ ((section(".ARM.__at_0x20000000"))) = 10; // RW
方式二: 修改.sct 文件
将目标文件加载到指定位置,在 Keil 中使用修改.sct 文件进行分散加载需要对工程配置进行如下修改,修改.sct
方法的详细使用请参考.sct 的语法规则,如下图 Keil 下 sct 文件编辑
其中 Use Memory Layout from Target Dialog 选项是默认勾选,应取消选择。点击 Scatter File 栏后的 Edit对.sct 文件进行编辑。
示例将 core_main.c 的目标文件进行分散加载:
红色区域表示将以上.c 文件加载到 0x08020000 地址,大小为 0x00020000。在这里,其目的通俗来说就是将以上.c 文件编译生成的目标文件链接到 MCU 芯片内部 flash 的 128KB 区域之后,区域大小为 128KB。
类型:MCU 应用
适用型号:AT32 全系列
FAQ0005:如何使用 Keil 生成 Bin 文件
Answer:在 user 配置栏增加如下内容:fromelf.exe --bin --output .\Listings\@L.bin !L
类型:开发工具
适用型号:AT32 全系列
FAQ0006:Keil_V5 在 Target->Device 和 Target->C/C++ 栏的芯片型号配置不对应的情况下编译可能会出现编译报错,编译错误有如下相似的信息:
Answer:
在 PACK_V1.3.0 及以后的版本上加入了 KEIL RTE 的功能,工程配置在选定 Device 后,Pack 会自动定义一个芯片型号宏(如:AT32F403ZG AT32F403Zx_XL,AT32F403AVGT7 AT32F403AVGT7)。
示例:
按 AT32F403ZG 和 AT32F403AVGT7 为例,在工程配置的时候就应该有严格的对应关系。在 Target->Device和 Target->C/C++栏的配置关系需如下:
AT32F403ZG
AT32F403AVGT7
类型:开发工具
适用型号:AT32 全系列
FAQ0007:在使用 ISP 的 DFU 接口烧录时,每次上下一次新的 MCU 烧录时,USB 会重新安装一次,导致识别 MCU 时间过长
Answer:
Windows 设置需首先到网络上搜索最新版本驱动,时间过长主要是花费在网上搜索最新驱动版本的过程。按以下步骤设置进行关闭来解决
1. 点击“计算机”-“属性”
2. 点击“高级系统设置”
3. 点击“硬件”—“设备安装设置”
4. 选择红色方框中两项任意一项即可,并点击“保存更改”使设定生效
类型:开发工具
适用型号:AT32 全系列
FAQ0008:Keil 或者 IAR 项目内 Jlink 无法找到 IC 问题(编译环境问题)
Answer:
工程师编译好的 Keil 下的工程项目给到其他工程人员后发现程序可以编译通过,使用 ICP 软件可以正常找到IC,但 Jlink 找不到 IC,出现该问题的原因通常是因为 Keil 或者 IAR 编译器原始调用的是其安装目录下内置的 Segger 驱动,而其内置的 Segger 驱动型号列表目前没有支持 AT32 MCU
解决方法:针对 Keil 或者 IAR 的该问题,给出两种常见的解决方法
方法 1:
1) Keil 工程路径内删除 JLinkLog.txt 和 JLinkSettings.ini 两个文件
IAR 工程路径内删除 settings 文件夹下的 xxx.jlink 文件
2) 当 Segger J-ink 弹框时选择使用的 MCU 对应的内核型号,例如“Unspecified Cortex–M4”
方法 2:
1) 安装 Segger 软件包(需 v6.20c 及以上版本),安装时弹框勾选如下内容(默认是勾选,不更改即可)
2) 安装 Segger_AT32MCU_AddOn 工具包
3) 运行 Keil 弹框时可以选择对应型号的 MCU,IAR 运行不会再弹框
类型:开发工具
适用型号:AT32 全系列
FAQ0009:较多电路板在设计时,为了节省空间,会采用 SWD 方式下载程序,并在硬件设计上只将 SWCLK、SWDIO 及 GND 与 J-Link 对接,此时就有可能会出现无法正常下载代码的现象此问题只针对以下 J-Link 驱动版本:
J-Link 版本为 HW:V8.00 dll:V6.20c(或更高版本)
J-Link 与芯片连接方式为仅 SWCLK、SWDIO 及 GND 对接
Answer:
J-Link 下载代码时,其会根据 J-Link Pin1 上的电压值来确定数据及时钟线上输出的电平信号的高低,老版本(本案中 V8)的 J-Link,其内部 Pin1 和 Pin2 未被短接;J-Link 与芯片连接方式为 SWCLK、SWDIO 及 GND 对接,未将芯片的参考电压接到 J-Link 的 Pin1 脚,故此时 J-Link 的 Pin1 脚上无电压输入,因此会出现因 J-Link 没有检测到芯片的参考电压而造成无法正常下载代码的问题
J-Link 用作 SWD 接口时,管脚定义如下
解决步骤:
1. 如果硬件电路板支持改动,可将芯片的 VDD(常规即 3.3V)接到 J-Link 的 Pin1 上
2. 如果硬件电路板不支持改动,可以将 J-Link 的 Pin1 和 Pin2 短接(前提是 Pin2 内部跳线有与 3.3V 短接)
注意:
1. 此无法下载代码的问题在其它 MCU 也会出现,均会提示无法找到芯片内核
2. 新版本(例如 V8.3)J-Link 内部已将 Pin1 和 Pin2 短接,因此不会出现前述问题
3. 建议 J-Link 同目标板连接请接入 RST 信号,即连接:VDD、VSS、GND、SWDIO、SWCLK、RST 信号
类型:开发工具
适用型号:AT32 全系列
FAQ0010:使用 IAR 编译器,在编译时提示找不到,某个.h 打不开,某个.h 文件未定义
Answer:
解决方法:
1. project 的 options 里 Additional include directories 没有包含相应.h 文件路径或者包含的路径错误;Defined symbols 没有添加宏定义(宏定义也可以在程序中添加)
2. project 的 options 里 Additional include directories 和 Defined symbols 都添加正确,但在某个.c 文件里还有提示找不到某个.h,则查看.c 的 options,确认路径处和宏定义处是否和 project 的 options 里一致,如果不一致则修改为一致
类型:开发工具
适用型号:AT32 全系列
FAQ0011:当使用有数据通信功能的 USB 接口给 MCU 供电时,ISP 软件无法识别到串口
Answer:AT32F4xx 的 ISP 具有 USB 接口升级程序的功能,并且优先选择 USB 接口。所以如果给 MCU 供电的 USB口带有数据通信功能(比如 PC 端)此时 ISP 软件将无法识别到 USART 接口,需要换成其他方式供电才可以正常识别。
类型:开发工具
适用型号:AT32 全系列
FAQ0012:如何用 ICP 或 ISP 对外部 FLASH 加密
Answer:
对外部 Flash 加密操作需要先设置加密范围和外部存储器加密 Key 后再烧录用户程序,然后开启读保护。加密范围指的是从 0x08400000 开始需要加密的空间大小,外部存储器加密 Key 共有 8 个 byte,如果全部是0xFF 或者 0x00 则不加密,否则在烧录用户程序时进行加密。解除读保护会将外部存储器加密 Key 设置为全0xFF。
在用户程序中需要设置 FLASH_DA 寄存器来设置加密范围,该寄存器的值需要大于等于编程时写入的外部存储器加密范围。需要设置 FLASH->SELECT 选择外部存储器型号选择,支持的型号如下。
闪存选择寄存器(FLASH_SELECT)设定 0x1:可支援 GD25Q127C、GD25Q64C、GD25Q32C、GD25Q16C、GD25Q80C 闪存、W25Q128V 闪存等
闪存选择寄存器(FLASH_SELECT)设定 0x2:可支援 EN25F20A、EN25QH128A 闪存以下为 ICP/ISP 工具加密外部存储器的操作说明:
1. ICP 工具:勾选外部存储器->选择外部存储器类型->设置外部存储器加密范围->设备操作->用户系统数据->修改外部存储器加密 Key->应用到设备。然后按照烧录流程烧录程序,开启读保护。
2. ISP 工具:编辑用户系统数据->下一步->修改外部存储器加密 Key->应用到设备。然后按照烧录流程烧录程序,开启读保护。
3. ISP Multi-Port 工具:编辑->修改外部存储器加密 Key->保存到文件->下载选择字节文件->开始。然后按照烧录流程烧录程序,开启读保护。
类型:开发工具
适用型号:AT32 全系列
FAQ0013:硬件和软件同时去访问 USB RAM buffer 造成数据乱掉或丢失
造成乱码流程:
1. 软件设置 USB Valid
2. 关总中断,USB 收数据到 RAM Buffer,此时 USB 为 NAK
3. USB 中断不能及时响应,此时软件再次将 USB 置 Valid,开总中断
4. 此时 USB 中断产生,软件读取接收 RAM Buffer 数据,但此时 USB 的状态是 Valid,USB 同也会收数据到 RAM Buffer。这样就会导致数据乱掉或者丢数据
Answer:
软件将 USB 收到的数据处理之后再置 USB Valid,以避免硬件和软件同时访问 USB 接收 Buffer。
类型:MCU 应用
适用型号:适用所有带 USB 的 AT32 型号
主功能:USB
FAQ0014:
FAQ0015:如果客户在代码中翻转 RXDTS 位,软件翻转之后导致主机发送的 DATA PID 与
USB 设备端不匹配。比如:主机发送一个 DATA1,但 USB 设备端此时 RXDTS=0(表示要希望
收到 DATA0)。在这种情况下,会产生总线错误,BE 标志被置起
Answer:
代码中及时清除 BE 标志。
/* clear suspend flag */
usb_flag_clear(usbx, USB_BE_FLAG);
类型:MCU 应用
适用型号:适用所有带 USB 的 MCU 型号
主功能:USB
FAQ0016:如何将以下默认非 GPIO 的 Pin 设置为 GPIO
将以上 IO 设置为 GPIO,需要开启对应 GPIO 时钟、开启复用时钟、将 IO 配置为输入/输出/复用功能、设置
重映射、关闭入侵检测、关闭外部时钟等相应的操作。
1. 将 HEXT_IN、HEXT_OUT 设置为 GPIO
此处以 AT32F403A 为例
gpio_init_type gpio_init_struct;
/* enable the clock of gpiod, iomux */
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, FALSE);
crm_hext_bypass(FALSE);
/* set default parameter */
gpio_default_para_init(&gpio_init_struct);
/* configure pd0 (hext_in) and pd1 (hext_out) as output push-pull */
gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOD, &gpio_init_struct);
gpio_pin_remap_config(PD01_GMUX, TRUE);
注:如果要使用 PD0、PD1,则时钟初始化时不用使能 HSE、PLL 时钟源不能选择为 HEXT。
2. 将 SWJ 设置为 GPIO
此处以 AT32F403A 为例
gpio_init_type gpio_init_struct;
/* enable the clock of gpioa, gpiob, iomux */
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
/* set default parameter */
gpio_default_para_init(&gpio_init_struct);
/* configure pa13 (jtms/swdat), pa14 (jtck/swclk) and pa15 (jtdi) as output push -pull */
gpio_init_struct.gpio_pins = GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOA, &gpio_init_struct);
/* configure pb3 (jtdo) and pb4 (jtrst) as output push-pull */
gpio_init_struct.gpio_pins = GPIO_PINS_3 | GPIO_PINS_4;
gpio_init(GPIOB, &gpio_init_struct);
/* disable the serial wire jtag debug port swj-dp */
gpio_pin_remap_config(SWJTAG_MUX_100, TRUE);
关于 SWJ 重映射说明:
/* full swj enabled (jtag-dp + sw-dp) but without jtrst */
#define SWJTAG_MUX_001 SWJTAG_GMUX_001
/* jtag-dp disabled and sw-dp enabled */
#define SWJTAG_MUX_010 SWJTAG_GMUX_010
/* full swj disabled (jtag-dp + sw-dp) */
#define SWJTAG_MUX_100 SWJTAG_GMUX_100
3. 将 TAMPER-RTC、LEXT_IN、LEXT_OUT 设置为 GPIO
此处以 AT32F403A 为例
gpio_init_type gpio_init_struct;
/* enable the clock of gpioc, bpr, pwc */
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_BPR_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);
pwc_battery_powered_domain_access(TRUE);
bpr_tamper_pin_enable(FALSE);
crm_lext_bypass(FALSE);
crm_clock_source_enable(CRM_CLOCK_SOURCE_LEXT, FALSE);
pwc_battery_powered_domain_access(FALSE);
/* configure pc13 (tamper-rtc), pc14 (lext_in) and pc15 (lext_out) as output push-pull */
gpio_init_struct.gpio_pins = GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_drive_strengt h = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOC, &gpio_init_struct);
注:如果要使用 PC14、PC15,则时钟初始化时不用使能 LEXT。
类型:MCU 应用
适用型号:AT32 全系列
主功能:GPIO
FAQ0017:耐压 5V I/O 口在上电期间及 NRST 为 low 时,会导致高电平驱动方式时的 LED 弱亮
Answer:
AT32F4xx 的耐压 5V I/O 在复位期间及设置为 input floating 模式时约有最大不超过 10uA 的推动能力,当芯片于复位期间或 MCU 程序尚未运行起来,此时 IO 保持默认为 input floating 模式,在此期间 LED 就被这很小的电流微点亮了(下图为 LED 连接方式)
此现象是因 5V 耐压 I/O 设计结构特性有关。在上电或复位位期间,N_8(如下图所示)会为 low, long channeldevice 被开启,如果 IO 有阻性负载到地,会形成电源经由 long channel device 到 I/O 到阻性负载到地的路径。此设计结果会提供 uA 等级电流推动能力。如果耐压 5V I/O 外部下拉足够(如 100K),这条路径会自动断开,此时即无此等级的电流(最大 10uA)即可以消除复位期间及设置为 input floating 模式时 LED 弱亮的现象, 此现象为耐压 5V I/O 设计结构特性,并非不合理或来路不明的漏电流,对产品静电测试并不会造成影响。
解决方法:建议使用耐压 5V I/O 口 LOW 电压方式驱动点亮 LED
类型:MCU 应用
适用型号:AT32 全系列
主功能:GPIO
FAQ0018:如果非 5V 容忍管脚,输入电平超过芯片的 VDD + 0.3V 的高电压会有什么问题
Answer:
有以下两种问题:
1. 此高电压透过芯片内部路径抬升 VDD/VDDA 电压,此高电压也会透过 ADC 内部干扰其他 ADC 通道输入信号源,因此导致任一 ADC 通道采样结果都不准确
2. 因芯片内部设计,此高电压在 64 和 48 管脚封装内会干扰 HEXT,导致其无法起振或起振后又停振
综合以上影响,任何外部器件其输出超过 VDD + 0.3V,不可直接与非 5V 容忍管脚连接。此时建议这类器件输出信号源先经一电阻分压网路将输出分压到 VDD 以下,再连接到非 5V 容忍管脚,如此可避免上述问题发生。AT32MCU 的管脚具有片内下拉电阻(RPD),分压网路可以以信号源串接一外接电阻(RIN)连接至非 5V容忍管脚,再配合软件使能该管脚之片内下拉电阻,形成最简单的电阻分压网路。
考虑片内下拉电阻值工艺徧差可能,选择 RIN 时应满足以下两个条件:
(1) 以 RPD 最大值估算分压后 VPIN 需低于 VDD
(2) 以 RPD 最小值估算分压后 VPIN 需高于 VIH 最小值规格
例如:
若 VDD = 3.3V,VIN = 3.8V,可选择 RIN = 30 kΩ
(1) 3.8×120/(30+120)=3.04V,低于 3.3V
(2) 3.8×70/(30+70)=2.66V,高于 0.31×3.3+0.8=1.823V
遵守以上条件可避免非 5V 容忍管脚承受电平超过 VDD + 0.3V 以上电压,并使器件输出之高电平经分压后仍可被管脚认得为输入高电平。
类型:MCU 应用
适用型号:AT32 全系列
主功能:GPIO
FAQ0019:AT32F4xx IO 驱动能力设置同其它 MCU 的不同之处
Answer:
AT32F4xx IO 设置说明如下:
1. AT32F4xx IO 三种驱动能力的说明:
(1) GPIO_DRIVE_STRENGTH_MODERATE 对应适中的电流推动/吸入能力
(2) GPIO_DRIVE_STRENGTH_STRONGER 对应较大的电流推动/吸入能力
(3) GPIO_DRIVE_STRENGTH_MAXIMUM 对应极大的电流推动/吸入能力
2. 如果 IO 速度设置为最大的推动力设置,且负载较小时,易在 IO 上产生过冲振铃现象,存在影响应用的可能
性
3. 对于常规应用:
推荐把 IO 速度设置为:GPIO_DRIVE_STRENGTH_MODERATE
对于需要强电流驱动应用:
推荐把 IO 速度设置为 GPIO_DRIVE_STRENGTH_STRONGER,GPIO_DRIVE_STRENGTH_MAXIMUM
也可在 IO 处预留串接电阻
类型:MCU 应用
适用型号:AT32 全系列
主功能:GPIO
FAQ0020:如何避免 FT(5V 容忍)引脚浮空输入时维持在中间电平,以获得正确的输入逻辑值
Answer:
因 5V 容忍管脚在浮空输入模式时,仍有约小于 10 μA 的上拉电流能力,以致管脚可能维持约 2.0V 电压让管脚输入逻辑仍判为高电平
解决方法:使用者可于引脚外部加下拉电阻避免 5V 容忍管脚电压维持在中间电平的问题,推荐下拉电阻值
如下表:
类型:MCU 应用
适用型号:AT32F403, AT32F413,AT32F415
主功能:GPIO
FAQ0021:WIN 7 系统安装虚拟串口驱动的问题
Answer:
在用我们 usb_device 例程 vcp_loopback 时,WIN 7 系统需要安装驱动,Artery 官网上有虚拟串口上位机的驱动,驱动程序文件名 VirtualCOM_DriverInstall,但有些 GHOST 版系统下安装会有问题,解决步骤如下:
1. 确认是否有 mdmcpq.PNF 和 mdmcpq.inf,需放在 C:\Windows\inf 目录下
2. 确认是否有 usbser.sys,需放在 C:\WINDOWS\SYSTEM32\DRIVERS 下,以上文件没有的话,从其他电脑系统上拷贝一份
3. 如果以上步骤都操作过还有问题的话,请将 mdmcpq.inf 中如下代码注释掉
[FakeModemCopyFileSection]
;usbser.sys
这是为了避免 FileRepository 中的文件可能有问题导致复制出错
4. usbser.sys 文件根据系统决定,64 位系统用 64 位的,32 位系统用 32 位的, 附件有提供 WIN 7 系统下 32
位和 64 位 usbser.sys 文件
类型:MCU 应用
适用型号:适用所有带 USB 的 AT32 型号
FAQ0022:I2C 主模式下,在发送地址后在写数据时(主发模式),产生一个预期外的 STOP,如下图所示:
Answer:
I2C_CTRL1 寄存器的 GENSTOP 位描述如下:
在软件操作 I2C_CTRL1 寄存器的 GENSTOP 位发送 STOP 后,如果没有等待硬件将该位清除以后再执行I2C_CTRL1 的其他操作(比如下一次通信开始时操作 GENSTART),会导致硬件逻辑出错,出现异常情况,库函数会因此去产生一个 STOP。
解决方式:配置完 STOP 后添加判断 GENSTOP 位是否清除,再去做其他操作
/* generate stop condtion */
i2c_stop_generate(hi2c->i2cx);
/* wait for the stop flag to be reset */
hi2c->status = i2c_wait_flag(hi2c, I2C_STOPF_FLAG, RESET, I2C_EVENT_CHECK_NO NE,
hi2c->timeout);
类型:MCU 应用
适用型号:AT32 全系列
主功能:I2C
FAQ0023:同时触发 ADC1 ADC2 ADC3 方法
Answer:
单个 ADC 框图如下:
如上图所示,ADC 支持多种的外部触发方式,并且 ADC1 和 ADC2 支持双 ADC 模式。所以可以 ADC1 和ADC2 采用双 ADC 模式(普通同时模式),ADC3 与 ADC1 和 ADC2 采用相同的触发源以达到同步的效果。得到转换结果后通过 DMA 将数据传送到内部 SRAM 中。
类型:MCU 应用
适用型号:AT32F403,AT32F403A,AT32F407
主功能:ADC
FAQ0024:
FAQ0025:AT32F403 ADC 实测 4MHz 采样速率
Answer:
经实测 AT32F403 ADC 以 4 MHz 采样速率操作,结果比起数据手册上限 2 MHz 差。采样率 2 MHz 时总体
分辨率保证可达 12 bit, 而 4 MHz 时可达约 9.2 bit。实测结果如下图:
类型:MCU 应用
适用型号:AT32 全系列
主功能:ADC
FAQ0026:在 ADC 输入内阻不配情况下提高 ADC 准确度方法
Answer:
在客户应用中输入源输入电阻同推荐的值不配匹,如果输入源内阻过大,会导致 ADC 转换精度 降低。以AT32F403 为例,ADC 推荐的输入源内阻如下:
为了提高 ADC 转换精度建议如下处理:
1. 可以加大采样时间来消除 ADC 采样时间不足导致的转换精度不佳;如果现在是使用 1.5 的 CLK 采样时间,发现转换精度不佳,可以用在项目允许的条件下,先按:7.5-13.5-28.5-41.5-55.5 CLK 的方式一步一步增大,直到满足要求
2. 在输入 ADC 的 I/O 口处并接电容 330pF-0.1uF,以对信号预采样
3. 若采样信号低于𝑉𝐷𝐷𝐴 /2(或𝑉𝑅𝐸𝐹 /2)时,可在采样前先插入一次对内部𝑉𝑅𝐸𝐹𝐼𝑁𝑇 1.2V 的采样,此操作可将 ADC内部采样电容放电于一理想电压后,再对目标信号采样
4. 采样软件方式:对 ADC 采样的值第一次丢弃,使用第二次采样的值或进行排序中值滤波。此种方式可以消除输入源内阻过大时,在不同通道切换时,上一个通道的电压来不及放电,导致的 ADC 此通道的值偏大或偏小
ADC I/O 口特别注意事项:同所有 ADC 互用的 I/O 口输入的电压不能超过𝑉𝐷𝐷𝐴 (MCU 工作电压)+0.3V;如
果存在,建议客户使用分压电阻或减压到此电压范围
5. 增加每次采样时间间隔。
类型:MCU 应用
适用型号:AT32 全系列
主功能:ADC
FAQ0027:
FAQ0028:
FAQ0029:
FAQ0030:
FAQ0031:
FAQ0032:
FAQ0033:
FAQ0034:
FAQ0035:
FAQ0036:
FAQ0037:
FAQ0038:
FAQ0039:
FAQ0040:
FAQ0041:
FAQ0042:
FAQ0043:
FAQ0044:
FAQ0045:
FAQ0046:
FAQ0047:
FAQ0048:
FAQ0049:
FAQ0050:
FAQ0051:
FAQ0052:
FAQ0053:
FAQ0054:
FAQ0055:
FAQ0056:
FAQ0057:
FAQ0058:
FAQ0059:
FAQ0060:
FAQ0061:
FAQ0062:
FAQ0063:
FAQ0064:
FAQ0065:
FAQ0066:
FAQ0067:
FAQ0068:
FAQ0069:
FAQ0070:
FAQ0071:
FAQ0072:
FAQ0073:
FAQ0074:
FAQ0075:
FAQ0076:
FAQ0077:
FAQ0078:
FAQ0079:
FAQ0080:
FAQ0081:
FAQ0082:
FAQ0083:
FAQ0084:
FAQ0085:
FAQ0086:
FAQ0087:
FAQ0088:
FAQ0089:
FAQ0090:
FAQ0091:
FAQ0092:
FAQ0093:
FAQ0094:
FAQ0095:
FAQ0096:
FAQ0097:
FAQ0098:
FAQ0099:
FAQ0100:
FAQ0101:
FAQ0102:
FAQ0103:
FAQ0104:
FAQ0105:
FAQ0106:
FAQ0107:
FAQ0108:
FAQ0109:
FAQ0110:
FAQ0111:
FAQ0112:
FAQ0113:
FAQ0114:
FAQ0115:
FAQ0116:
FAQ0117:
FAQ0118:
FAQ0119:
FAQ0120:
FAQ0121:
FAQ0122:
FAQ0123:
FAQ0124:
FAQ0125:
FAQ0126:
FAQ0127:
FAQ0128:
FAQ0129:
FAQ0130:
FAQ0131:
FAQ0132:
FAQ0133:
FAQ0134:
FAQ0135:
FAQ0136:
FAQ0137:
FAQ0138:
FAQ0139:
FAQ0140:
|