程序很简单, 就是通过ADC1_CH1连续采集n个值储存在数组中,然后通过串口一次过送到电脑去,然后使用delay_ms(1000);延时1S。调试中发现只要n>=449,delay_ms函数就工作不正常了,本来应该延时1000ms的,实际延时了估计只有几十ms,但是n<449就一切都正常。
MCU用的是RBT6, 20K的SRAM,肯定没溢出,但是看.map文件无论n是几内存占用都是1 397 bytes of readwrite data memory.
#define TIME 449
int main(void)
{
u16 dat[TIME];
u16 i;
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
ADC_CaptureInit();
while(1)
{
for(i=0;i<TIME;i++)
{
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
dat = ADC_GetConversionValue(ADC1);
}
printf("------------------------\r\n");
for(i=0;i<TIME;i++)
{
printf("%d\r\n",dat);
}
printf("------------------------\r\n");
delay_ms(1000);
}
} |