OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 142|回复: 6

真心求助!

[复制链接]

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-4-17
在线时间
0 小时
发表于 5 天前 | 显示全部楼层 |阅读模式
正点原子公众号
#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

主题

192

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

  离线 

2

主题

66

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

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

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

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

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

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

使用道具 举报

  离线 

4

主题

192

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

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

使用道具 举报

  离线 

11

主题

111

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

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

本版积分规则




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

GMT+8, 2018-4-22 12:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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