OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32/FPGA开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 482|回复: 6

真心求助!

[复制链接]

  离线 

1

主题

3

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-4-17
在线时间
2 小时
发表于 2018-4-17 16:01:01 | 显示全部楼层 |阅读模式
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
u8 i=0,t,s=0;
u16 adc,AD_number=0,y=0;
u16 ADC_number[10]={0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11};
int main(void)
{               
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        LED_Init();                             //LED端口初始化
        TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms  
        while(1);
}         
void TIM3_IRQHandler(void)   //TIM3中断
{
        if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
                {
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
                        for(t=0;t<3;t++)
                        {
                                y+=ADC_number[t];
                        }
//                AD_number =ADC_number[0]+ADC_number[1]+ADC_number[2]+ADC_number[3];
                        AD_number=y/3;
                        USART_SendData(USART1,AD_number);//向串口1发送数据
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);  //等待发送结束
                }
}
这个程序实现对数组前三个元素取平均值并串口发送,奇怪的是用for语句串口收到的值一直不对,而用下面注释掉的语句出来的值就没有问题,请问各位前辈我的for语句有错吗?求解


回复

使用道具 举报

  离线 

4

主题

210

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2477
金钱
2477
注册时间
2016-7-6
在线时间
529 小时
发表于 2018-4-17 16:44:58 | 显示全部楼层
      y+=ADC_number[t];
y的值是变化的,所以会越来越大。
建议在中断里定义一个临时变量y。
把复杂的事,做简单!
回复 支持 反对

使用道具 举报

  离线 

2

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2016-9-1
在线时间
31 小时
发表于 2018-4-17 16:50:31 | 显示全部楼层
y你每进入一次中断都回将数组前3个数累加,你可以在向串口发送完数据后将y清0
回复 支持 反对

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-4-17
在线时间
2 小时
 楼主| 发表于 2018-4-17 22:28:56 | 显示全部楼层
月无缺 发表于 2018-4-17 16:44
y+=ADC_number[t];
y的值是变化的,所以会越来越大。
建议在中断里定义一个临时变量y。

谢谢!问题解决了
回复 支持 反对

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-4-17
在线时间
2 小时
 楼主| 发表于 2018-4-17 22:29:53 | 显示全部楼层
月无缺 发表于 2018-4-17 16:44
y+=ADC_number[t];
y的值是变化的,所以会越来越大。
建议在中断里定义一个临时变量y。

非常感谢,问题解决了。
回复 支持 反对

使用道具 举报

  离线 

4

主题

210

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2477
金钱
2477
注册时间
2016-7-6
在线时间
529 小时
发表于 2018-4-18 09:16:25 | 显示全部楼层
mashengcai 发表于 2018-4-17 22:29
非常感谢,问题解决了。

问题解决了就好。
把复杂的事,做简单!
回复 支持 反对

使用道具 举报

  离线 

20

主题

249

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
382
金钱
382
注册时间
2017-7-17
在线时间
83 小时
发表于 2018-4-18 09:23:25 | 显示全部楼层
你的y是在哪里定义的呀,你在进入for之前把y初始化为0就可以了。
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

正点原子STM32/FPGA资料免费洗澡上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-12-12 22:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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