1,stm32最小系统板无法用usb转ttl的方式给系统供电,这会让单片机供电不足使部分功能无法使用,最好是用一个单独的电源供电。
2,对于频率的采样,我们只需要采样率至少大于
2倍波的频率,至少要采到两个点,但精度还是太低了。如果要精确一点至少要20个点,若要显示出来并还原波形大概要100个点。
3,之前想错了,对于低频信号比如10HZ的信号,你只要有200hz的采样频率就可以采到较为精确的信号,不需要降低采样频率,反而采样频率越高,波形还原越准确。
4,比如一个0.1hz的信号,它的波形需要10s才能走完一整个波形,那你就至少需要有20✖️0.1=2hz的
采样频率才能才到较为精准的信号。解读:因为他需要10s才能走完一个波形所以只要等它走完,你至少要等10s才行。所以有两个条件,一为等待时间,总采样时间要大于等待时间,二为采样频率必须大于2倍采样频率。
5,所以当你有300k的采样频率时你可以采30个点采集10khz的波形,然后共采1024✖️10个点,算10次fft算平均值就可以得到频率了。若用300k采集500hz的信号是一样的道理,但总采样时间会变长。
6,fft的采样点数越多,采样得到的频率的深度越高。
7,其实对于这种需要一直重复做一件事情的最好用fpga,fpga在通信领域的作用很大
1,我在keil5文件夹创建了文件模板,用于把cube生成的外设配置和it配置植入到模板中,模板中编译更方便,不过模板能用但还有待改善,因为生成的cube文件中可能还有其它文件的改动。
2,adc_dma模式。dma循环模式下(外设寄存器地址递增模式),寄存器在搬运完数值(搬到你设置的缓冲区)后会把再次从缓冲区的初始地址开始搬运,并覆盖初始值。dma单次模式下,搬运完数值后会停止搬运,想要再次搬运需要打开dma开启函数HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);
1,数组重定义(可能是我在main.h和adc.h相互调用了头文件)
在头文件中的数值中加上extern就行了
extern uint32_t lBufInArray[NPT]; /* FFT 运算的输入数组 */
extern uint32_t lBufOutArray[NPT/2]; /* FFT 运算的输出数组 */
extern uint32_t lBufMagArray[NPT/2]; /* 各次谐波的幅值 */
SRAM,全名Static Random-Access Memory,译为静态随机存取存储器,是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。与之相对应的是DRAM,也就是动态随机存取存储器,其里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM储存的数据是会消失的。
stm32f10xx
可以写 3FF*32位的数据=可以存入1024*2个16进制数据
- %x:普通小写16进制
- %X:普通大写16进制
- %#x:带0x前缀的小写16进制
- %#X:带0X前缀的大写16进制
在写数字电位器时你需要把c/s引脚拉低以接收信号,把信号拉高以存入信号
蓝牙
- 硬件:现有的模块拥有6个引脚分别为:STATE、RX、TX、GND、VCC、EN。其中STATE是蓝牙状态指示灯,连接成功则被拉高,led灯珠被点亮,连接失败就持续维低。
LUUID:搜素UUID 为通道
SUUID:服务UUID 这个简单的理解为一所学校 ,这个学校的唯一标识是它的UUID
HC08的AT指令是不需要换行的
从下面引出来和从旁边引出来这里的电路不会有影响,他们是并联的
stm32拥有内置flash。flash的特点是掉电不擦除,不过每一次的下载程序都会让它直接清空然后下载新的程序。
电压检测电路,这里需要接地才能检测到实际的电压
mos管做开关
关于主板不能正常启动的原因:把usb转ttl这个外设去掉就能实现控制板启动问题了。
因为不能用主板单独供3.3v的电压所以用以下的方式实现对mos开关的控制。
优点:1,能实现对端口3.3v的稳定供电(不会因为单片机自身的问题而电压不稳)
2,避免了用单片机供电(不要用单片机对外部供电)
项目经验:1.调试时必须和对接人确定好所有调式的型号,要保证型号一样。
型号不一样:
我用的单片机内置flash,因为(C6T6的flash为32K, C8T6为64K)大小不一样导致了flash使用出错。
导致我的spi2无效(C6T6没有串行外设接口SPI2)
STM32中空的I/O管脚是高电平还是低电平取决于具体情况。
1、IO端口复位后处于浮空状态,也就是其电平状态由外围电路决定。
2、STM32上电复位瞬间I/O口的电平状态默认是浮空输入,因此是高阻。做到低功耗。
3、
STM32的IO管脚配置口默认为浮空输入,把选择权留给用户,这是一个很大的优势:一方面浮空输入确保不会出现用户不希望的默认电平(此时电平取决于用户的外围电路);另一方面降低了功耗,因为不管是上拉还是下拉都会有电流消耗。从另一个角度来看,不管I/O管脚的默认配置如何,还是需要在输出的管脚外加上拉或下拉,这是为了保证芯片上电期间和复位时输出的管脚始终处于已知的电平。
4、在没有任何操作的情况下,STM32通用推挽输出模式的引脚默认低电平,也就是有电的状态。所以在配置的时候通常会先把引脚的电平设置拉高,让电路不产生电流。有电到没电这一过程也就是引脚电平从低到高的过程。
5、STM32的I/O管脚有两种:TTL和CMOS,所有管脚都兼容TTL和CMOS电平。也就是说从输入识别电压上看,所有管脚不管是TTL管脚还是CMOS管脚都可以识别TTL或CMOS电平。
一直在找程序为什么没法在板子上运行,结果是因为硬件的焊接问题。
怎么发现的,是最后重新打板后用的嘉立创的贴片机焊接好的,拿到板子后程序就可以运行了。
所以改程序时一定要排除硬件问题。
串口给蓝牙发数据时如果出现了数据的粘连则可以做一些延时来解决或者增加波特率。
程序都写好了,功能也都能实现,但出现数字电位器出现的问题:
数字电位器在控制板上能够运行并且电压表能打出电阻,但是把他的电阻输出端插入主板后,电压表就打不出它的电阻了。
初步认为是因为数字电位器输出端没法承受大于10mA的电流(数字电位器的安全工作电压在10ma以内),这个可以换一个新的芯片(数字电位器的芯片,换能承受更高电流和电压的芯片)。