基于MCU(STM32F407ZGT6)+FPGA (cyclone 10LP)的简单逻辑分析仪
总体思路:利用FPGA8个IO口产生8路逻辑信号(这些逻辑信号存储在FPGA的ROM核中【极其容易实现】),然后单片机部分可以先试着把FPGA一路输出口用ADC检测后在串口助手上显示,慢慢的改进成用LCD显示,最后再把八路信号一并用LCD显示,这样由浅入深的推进(没有FPGA的同学另外两种做法第一个是用硬件电路移位寄存器芯片产生逻辑信号,第二个是可以用单片机自己产生)。 |||||||程序部分9月1号回学校有器材再写,届时会将程序与实物图贴出。
有关ADC的一些概念
1、LSB:least significant bit (最低有效位)
2、APB2 84MHz
3、ADC 要求36M以内
4、该款STM32芯片内置ADC为主次逼近型(12bit):分为16个外部通道,2个内部源,一个Vbat
5、STM32F407内部温度传感器连接在ADC1_IN16上面,内部参考电压连接在ADC1_IN17上面
6、感觉左对齐右对齐一般都选右对齐,因为选右对齐的话寄存器里面的数值就是真实值,如果是左对齐还需要移位来判断
7、ADC_SR = ADC State Register
8、ADC_CR = ADC Contol Register
9、ADC_SMPR = ADC Sample Time Register
关于ADC规则转换和注入转换的解释
规则转换就是普通的即时转换,而注入转换有点类似于中断,是需要设定特定的条件切入的(优先级比规则转换高)
关于ADC单次、连续、扫描的问题解释
比如说ADC1有通道CH0、CH1、CH2、CH3。
不开启扫描(scan)模式
单次转换
1、开启ADC1。
2、对CH0中的数据进行读取。
3、结束读取,等待下一次ADC1的开启。
连续转换
1、开启ADC1。
2、对CH0中的数据进行读取。
3、结束读取,继续回到第二步。
开启扫描模式
单次转换
1、开启ADC1。
2、对CH0中的数据进行读取。
3、对CH1中的数据进行读取。
4、对CH2中的数据进行读取。
5、对CH3中的数据进行读取。
6、结束读取,等待下一次ADC1的开启。
连续转换
1、开启ADC1。
2、对CH0中的数据进行读取。
3、对CH1中的数据进行读取。
4、对CH2中的数据进行读取。
5、对CH3中的数据进行读取。
6、结束读取,回到第二步。
ADC的工作过程
1、ADC的存储结果存储在一个16位的数据寄存器中
2、具有模拟看门狗,能够检测输入电压是否超过用户自定义的电压阈值
3、可配置的分辨率(12、10、8、6)