打印
[硬件设计]

STM32F429模拟AD芯片SCLk时,频率达不到要求问题,望指教

[复制链接]
1510|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
钓鱼村|  楼主 | 2017-10-24 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       实验中,使用的是stm32F429为主控芯片,外置14位AD芯片,4.2MSPS,需要采集的数据为1k~1M。具体过程为:我的方式是通过定义一个变量,再通过移位GPIO_ReadInputDataBit()采集到的AD输出二进制,最后通过printf()打印这个变量。完成传输采集数据。AD芯片SCLK等几个管脚都是连接的普通GPIO口,所以采用模拟方式来读取输出的16位二进制,并通过串口打印到PC上。
         现目前的主要问题是模拟过程中,模拟过程的周期太长了大约1ms左右了,这样算下来只能采集500Hz的信号了。主要问题是出现在程序中printf()这个函数上,执行这一句时间太长了;具体程序贴下面;
请问下:
1.这个输出数据思路对吗?
2.如何解决printf()执行时间太长的问题?
3.是否有其他方式来输出数据,来避免执行printf(),提高采样频率?

相关帖子

沙发
钓鱼村|  楼主 | 2017-10-24 12:20 | 只看该作者
int AD_control(void)
        {
                unsigned int data_num1=0;
                //int SDATA_A[16];
                unsigned short SDATA_A=0;
                unsigned short SDATA=0;
                unsigned short  DATA[300];
                 unsigned char data_num=0;
                        GPIO_SetBits(DEBUG_AD_CS_PORT,DEBUG_AD_CS_PIN);    //CS置1
                        GPIO_SetBits(DEBUG_AD_CLK_PORT,DEBUG_AD_CLK_PIN);  //SCLK置1
                        DELAY1(100);
                        GPIO_ResetBits(DEBUG_AD_CS_PORT,DEBUG_AD_CS_PIN);  //CS置0
                        DELAY1(100)               
               
               
        /**********************输出数据******************************/

                    for(data_num=0;data_num<16;data_num++)
    {
           SDATA=SDATA<<1;  

                            GPIO_ResetBits(DEBUG_AD_CLK_PORT,DEBUG_AD_CLK_PIN);                          //sclk置0
                                
                            SDATA_A=GPIO_ReadInputDataBit(DEBUG_AD_DA_PORT,DEBUG_AD_DA_PIN); //读取输出二进制位
                                                 SDATA=SDATA|SDATA_A;                                                                             //二进制位装入变量中

                            DELAY1(20);
                        
                            GPIO_SetBits(DEBUG_AD_CLK_PORT,DEBUG_AD_CLK_PIN);                          //sclk置1
                                    
                            DELAY1(20);
                        
   }        
                SDATA=SDATA>>1;            
         printf("%d,\n",SDATA);                          //打印变量输出二进制数据,,,??????就是此句占用了大量的时间

        }

使用特权

评论回复
板凳
钓鱼村|  楼主 | 2017-10-24 12:30 | 只看该作者
听说需要将先数据缓存

使用特权

评论回复
地板
kingkits| | 2017-10-31 13:45 | 只看该作者
如果需要输出看一下采样数据,建议先缓存在RAM里,然后再输出操作。如果你需要持续输出,那么,需要考虑一下通讯速度,要不然依然会阻塞

使用特权

评论回复
5
钓鱼村|  楼主 | 2017-11-17 23:01 | 只看该作者
对的,使用DMA方式传输,缓冲一下就可以了;谢谢大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

42

帖子

2

粉丝