STM32调试备忘

1.开机后跳到HardFault_Handler

地址解释:

R0、R1、R2、R3:通用寄存器,通常用于传递参数和保存临时数据;

R12: 这也是一个通用寄存器,用于保存临时数据;

Returnaddress: 保存了当前函数调用后的地址,这通常是指发生异常前将要执行的指令的地址;

PSR (Program Status Register):程序状态寄存器,保存了CPSR的当前值;

LR (Link Register): 链接寄存器,保存了异常发生前的返回地址

栈空间溢出,修改局部变量大小

2.无法DEBUG

cubeide Target is not responding, retrying...

解决方法:

CUBE里面配置SYS

3.printf无输出的问题及无法输出浮点型问题

复制代码
int _write(int file, char *ptr, int len)
{
	HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len,HAL_MAX_DELAY);
    return len;
}

4.I2C读取数据时序

5.ADC1 DMA采集频率

参考:

STM32cubemax+计算普通定时器定时+ADC采样频率计算_stm32adc采样频率-CSDN博客

所以:

ADC1 DMA的采样频率为:571K左右,DMA触发中断后启动下一轮DMA转换,因此存在一定的采样抖动,DMA中断频率(采样数1024)则为558Hz,数据处理可以等间距挑选小于571K频率的任意数据点

6.串口定频传输ADC数据

理论值:

本方案采用定时器中断来计数

TIM2频率64MHz,PSC:6399,counter:10,因此TIM1中断频率为:1KHz.

理论上每秒115200串口可以传输11520字节的数据,则每100ms传输1152字节,取50%为500字节,约传输100个数据点。

最后换算数据: