OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2896|回复: 2

有没有大神给我看看我写的定时器采样,并存储和发送的代码?但是程序有点小问题,求大神给我分析一下

[复制链接]

25

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2016-4-7
在线时间
33 小时
发表于 2016-4-19 21:29:32 | 显示全部楼层 |阅读模式
5金钱
主函数中:
while(1)
        {
                if(KEY_Scan()==1)                //10s后,若键值是1,启动定时器
                {
                        TIM3_Int_Init(4,7199);                //2KHz采样率,0.5ms采样一次,采样10s自动关闭中断,停止采样
                }
                if(KEY_Scan()==2)                //10s后,若键值是2,从flash中读取,并发送这20K数据
                {       
                        while(numr<40960)       
                        {
                                STMFLASH_Read(FLASH_SAVE_ADDR+numr,(u16*)TEXT_Buffer1,1);
                                u2_printf("%d\r\n",TEXT_Buffer1[0]);//蓝牙发送
                                numr=numr+2;
                        }
                        numr=0;
                       
                }
        }       
定时器3中断服务函数中:
//每秒中采样2K的ADC,并存储在flash,计满10s,关闭定时器
void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
        {
                       
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
                TEXT_Buffer[0]=Get_Adc(ADC_Channel_11);                        //定义有  u16 TEXT_Buffer[1];
                STMFLASH_Write(FLASH_SAVE_ADDR+numw,(u16*)TEXT_Buffer,1);//
                LCD_ShowString(60,150,200,16,16,"ING.... ");        //显示正在采样
                numw=numw+2;
                if(numw==40960)                        //采样10s,计满20KADC,40Kbyte数据,故numw是40960时停止
                {
                        numw=0;
                        TIM_Cmd(TIM3, DISABLE);                        //关闭定时器
                        LCD_ShowString(60,150,200,16,16,"END.... ");//显示采样结束
                }                
        }                       
}

按下KEY0后,KEY_Scan()==1,结果LCD一直在显示ING....,10s后也不显示END……,貌似在if前就会产生中断,进不了if。而且复位后黑屏。  求解。。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5785
金钱
5785
注册时间
2013-11-22
在线时间
1213 小时
发表于 2016-4-19 22:21:07 | 显示全部楼层
定时器中断函数里面的代码需要尽可能快处理玩,STMFLASH_Write(FLASH_SAVE_ADDR+numw,(u16*)TEXT_Buffer,1);//               
LCD_ShowString(60,150,200,16,16,"ING.... ");        //显示正在采样
这些代码放到main函数里面再试试吧


回复

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-19 22:46:05 | 显示全部楼层
mark。。看看  顶一个
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-10 10:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表