我正在努力学习如何使用SWD & openOCD非侵入性地调试单片机.
while (1)
{
my_count++;
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
HAL_Delay(750);
}
在我的单片机上运行的代码有一个免费的运行计数器"my_count“。我想实时地采样/跟踪存储在保存"my_count“地址中的数据:我是这样做的:
while(1){// generic algorithm no specific language
mdw 0x00000000200000ac; //openOCD command to read from an address
}
0x200000ac是来自my_count文件的变量.map的地址。但是,这种方法是非常缓慢的,经验数据下降在高频。有没有其他方法可以在不经历数据下降的情况下以高频率追踪这些数据?
发布于 2022-06-21 12:22:07
我做了一些餐巾纸的数学,我有一个可能有用的想法。
根据参考手册,第948页,STM32F334的UART的最大波特率为9 9Mbit/s。
如果我们想在特定的地址发送内存,它将是32位。1位需要1/9 9Mbps或1.111*10^(-7)s,乘以32位,等于3.555微秒。很明显,就像我说的,这纯粹是餐巾纸的数学。有启动和停止比特涉及。但我们有很大的回旋余地。您也可以轻松地将64位安装到传输中。
现在,我已经向互联网查询,似乎基于STM32F103的ST链路的最大波特率可以达到4.5Mbps。很遗憾,但我们只需要把时间加倍。3.55*2 = 7.1us为32位,14.2us为64位传输.即使有一些起点和停止位的开销,我们似乎仍然符合我们的25美元的时间预算。
因此,建议如下:
您有一个定时器设置为25 an周期,触发中断,激活DMA UART传输。这样,您的MCU实际上很少开销,因为DMA将自动处理传输,而您的MCU可以在此期间做它想做的任何事情。输入和退出计时器ISR实际上将是由此造成的最大开销,因为在ISR中,您实际上将翻转一对位,告诉DMA通过UART @ 4.5Mbps发送内容。
https://stackoverflow.com/questions/72695890
复制相似问题