OpenEdv-开源电子网

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

新手上路,stm32定时器中断无法进入,请求指点

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-30
在线时间
0 小时
发表于 2015-7-6 10:58:22 | 显示全部楼层 |阅读模式
5金钱

新手学STM32遇到了一个问题,程序中有一个60s的中断,但是程序下载后发现60s中断始终没有进入,有谁可以指导一下,小弟谢过 ~(应该不是定时器的配置问题,因为还有一个1s的中断同样来源于TIM2,是可以用的)


TIM2的配置:
  }/**********************************************************************
* 名    称:TIM2_IRQHandler()
* 功    能:定时器2溢出中断
* 入口参数:
* 出口参数:
-----------------------------------------------------------------------
* 说明:1s
***********************************************************************/
  void TIM2_IRQHandler (void)
{
  
   if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)//判断是否为定时器2溢出中断
   {
     TIM_ClearFlag(TIM2, TIM_FLAG_Update);      //清中断标记
     TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
   t_1S_flg=TRUE;
   tim2_int_cnt++;
      if(tim2_int_cnt ==60) //气水联合时间
       {
          tim2_int_cnt=0;
          t_60s_flg =TRUE;
       }
    }
  }



/***********************************************************************************/


main函数中的while循环如下:      
 while(1)
 { 

dengdai=1;

zhouqimoshi=1;


   //喂狗
   IWDG_ReloadCounter();
   if(zhouqimoshi_flg==1)
   {  
   switch(dengdai)
//     case 4://阀门控制
//     {
//      
//     }
//     break;
//     case 0://反冲洗
//     {
//      
//     }
//     break;
    case 1:
    {
    display5(202, 124,24);
    //喂狗
     IWDG_ReloadCounter();
        if(t_60s_flg)
        {             
       t_60s_flg=FALSE;   
      //图片显示
      //图片名: 时钟背景.png
      DisArea_Image(140,234, 7, 1);
      RX8025();                               (按道理说应该每60s  RX8025()时钟就刷新一次,但是没有刷新)
      screen60();
         }     
    }
    break;
//     default: break;
   }
 
  

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

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-30
在线时间
0 小时
 楼主| 发表于 2015-7-6 15:13:47 | 显示全部楼层
不确定,难道是因为后面的break问题吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-6 22:40:54 | 显示全部楼层
检查定时器配置。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-30
在线时间
0 小时
 楼主| 发表于 2015-7-17 09:14:30 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
多谢原子站长,问题解决了,确是配置问题
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-30
在线时间
0 小时
 楼主| 发表于 2015-7-17 09:38:55 | 显示全部楼层
回复【4楼】zhengdian-atom:
---------------------------------
原子哥,还有一个关于EEPROM(AT25256芯片)的问题想想你请教一下:
我往EEPROM的某一个地址里面写入一个数据,紧接着我将这个数据读出来进行显示,比如
e2prom_WriteWord(0x0027, 0x000a);//写入10
admin=e2prom_ReadWord(0x0027);
display(340, 105,admin);
第一次调用显示的时候结果正确,为10,但是当在程序的下面再次调用display(340, 105,admin)进行显示该数据的时候出现错误,显示的数据不再是10,而变为00

1我确定地址在有效范围之内
2中间没有对该数据做改动
3显示函数没有问题

谢谢!
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-7-17 10:34:30 | 显示全部楼层
回复【5楼】zhengdian-atom:
---------------------------------
1.你回复的是你自己的楼层
2.关于EEPROM你确定所说的第二点和第三点如果都成立吗
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-30
在线时间
0 小时
 楼主| 发表于 2015-7-17 11:33:09 | 显示全部楼层
回复【6楼】龙之谷:
---------------------------------
谢谢提醒 我完全确定都成立,也许是EEPROM读写操作的程序存在漏洞,读写完后电平重要拉高或拉低,不过我不太确定
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-30
在线时间
0 小时
 楼主| 发表于 2015-7-17 11:33:27 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,还有一个关于EEPROM(AT25256芯片)的问题想想你请教一下: 
我往EEPROM的某一个地址里面写入一个数据,紧接着我将这个数据读出来进行显示,比如 
e2prom_WriteWord(0x0027, 0x000a);//写入10 
admin=e2prom_ReadWord(0x0027); 
display(340, 105,admin); 
第一次调用显示的时候结果正确,为10,但是当在程序的下面再次调用display(340, 105,admin)进行显示该数据的时候出现错误,显示的数据不再是10,而变为00 

1我确定地址在有效范围之内 
2中间没有对该数据做改动 
3显示函数没有问题 

谢谢!
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-30
在线时间
0 小时
 楼主| 发表于 2015-7-17 11:35:18 | 显示全部楼层
回复【6楼】龙之谷:
这是整个程序
---------------------------------
/************************e2prom程序*************************/
#include "stm32f10x.h"
#include "delay.h"
#include "e2prom.h"
//#include "stm32f10x_sdio.h"
/*
 *@brief SPI写 1 个字节
 *@param Byte:写入字节
 *@retval none
 */
void write_byte(u8 Byte)
{
u8 i;

// IWDG_FEED(); //喂狗
for(i = 0;i < 8;i++)
{
if((Byte << i) & 0x80) //先写高位数据
PIN_SI_1;
else
PIN_SI_0;

PIN_SCLK_0;
// IWDG_FEED(); //喂狗
// nop();nop();nop();nop();nop();nop();nop(); //大于 200nS
delay_u8(100);
PIN_SCLK_1;
// IWDG_FEED(); //喂狗
// nop();nop();nop();nop();nop();nop();nop(); //大于 200nS
delay_u8(100);
}
}

/*
 *@brief SPI读 1 个字节
 *@param none
 *@retval u8:读出字节
 */
u8 read_byte(void)
{
u8 i,rByte=0;

// IWDG_FEED(); //喂狗
for(i = 0;i < 8;i ++)
{
PIN_SCLK_1;
// IWDG_FEED(); //喂狗
// nop();nop();nop();nop();nop();nop();nop();nop(); //大于 200nS
delay_u8(100);
PIN_SCLK_0;
// IWDG_FEED(); //喂狗
// nop();nop();nop();nop();nop();nop();nop();nop(); //大于 200nS
delay_u8(100);

rByte <<= 1;
if(SPI_SO)
{
rByte |= 0x01;
}
}
// IWDG_FEED(); //喂狗
return rByte;
}

/*
 *@brief 使能写e2prom
 *@param none
 *@retval none
 */
void e2prom_WREN(void)
{
PIN_CS_0;

write_byte(WREN);

PIN_CS_1;
// nop();nop();nop();
delay_u8(10);
}

/*
 *@brief 禁止写e2prom
 *@param none
 *@retval none
 */
void e2prom_WRDI(void)
{
e2prom_WREN();
PIN_CS_0;

write_byte(WRDI);

PIN_CS_1;
// nop();nop();nop();
delay_u8(10);
}

/*
 *@brief 写状态寄存器
 *@param Byte:写入字节
 *@retval none
 */
void e2prom_WRSR(u8 byte)
{
e2prom_WREN();
PIN_CS_0;

write_byte(WRSR);
write_byte(byte);

PIN_CS_1;
// nop();nop();nop();
delay_u8(10);
}

/*
 *@brief 读状态寄存器
 *@param none
 *@retval u8:读出字节
 */
u8 e2prom_RDSR(void)
{
static u8 sta = 0;

e2prom_WREN();
PIN_CS_0;

write_byte(RDSR);
sta = read_byte();

PIN_CS_1;
// nop();nop();nop();
delay_u8(10);
return sta;
}

/*
 *@brief 检查e2prom忙碌状态
 *@param none
 *@retval none
 */
void check_e2prom_busy(void)
{
u8 busy = 0;
do
{
busy = e2prom_RDSR();
}while(busy & 0x01);
//while((busy & 0x01) || !(busy & 0x02));
}

/*
 *@brief 写 1 个字节到e2prom
 *@param addr:地址
byte:写入字节
 *@retval none
 */
void e2prom_WriteByte(u16 addr, u8 byte)
{
check_e2prom_busy();
e2prom_WREN();
PIN_CS_0;

write_byte(WRITE);
write_byte((u8)(addr >> 8));
write_byte((u8)addr);
write_byte(byte);

PIN_CS_1;
// nop();nop();nop();
delay_u8(10);
}

/*
 *@brief 写 1 个字到e2prom
 *@param addr:地址
word:写入字
 *@retval none
 */
void e2prom_WriteWord(u16 addr, u16 word)
{
u8 Byte_h,Byte_l;

Byte_h = (u8)(word >> 8);
Byte_l = (u8)(word);
e2prom_WriteByte(addr,Byte_h);
e2prom_WriteByte((addr + 1),Byte_l);
}

/*
 *@brief 写 n 个字到e2prom
 *@param addr:起始地址
word:写入字
n:字数
 *@retval none
 */
void e2prom_WriteNWord(u16 addr, u16 *pword, u16 n)
{
u16 i = 0;
for(i = 0;i < n;i ++)
{
e2prom_WriteWord(addr, pword);
addr += 2;
}
}

/*
 *@brief e2prom 清零
 *@param none
 *@retval none
 */
void e2prom_Write_Zero(void)
{
u16 ai = 0;
for(ai = 0;ai < 4096;ai ++)
{
e2prom_WriteByte(ai, 0x00);
}
}

/*
 *@brief 从e2prom读 1 个字节
 *@param addr:地址
 *@retval u8:读出字节
 */
u8 e2prom_ReadByte(u16 addr)
{
u8 byte = 0;

check_e2prom_busy();
e2prom_WREN();
PIN_CS_0;

write_byte(READ);
write_byte((u8)(addr  >> 8));
write_byte((u8)addr);
byte = read_byte();

PIN_CS_1;
// nop();nop();nop();
delay_u8(10);
return byte;
}

/*
 *@brief 从e2prom读 1 个字
 *@param addr:地址
 *@retval u16:读出字
 */
u16 e2prom_ReadWord(u16 addr)
{
u8 byte_h,byte_l;
u16 word;

byte_h = e2prom_ReadByte(addr);
byte_l = e2prom_ReadByte((addr + 1));
word = (u16)(((u16)byte_h << 8) | byte_l);
return word;
}

/*
 *@brief 从e2prom读 n 个字
 *@param addr:地址
pword:读出字
n:字数
 *@retval none
 */
void e2prom_ReadNWord(u16 addr, u16 *pword, u16 n)
{
u16 i = 0;
for(i = 0;i < n;i ++)
{
pword = e2prom_ReadWord(addr);
addr += 2;
}
}

/*
 *@brief 配置e2prom
 *@param none
 *@retval none
 */
void e2prom_Conf(void)
{
e2prom_WRSR(0x80);
}
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-7-17 12:03:09 | 显示全部楼层
回复【9楼】zhengdian-atom:
---------------------------------
你贴这段代码是要闹哪样
我理解的你的过程是写入10,读出10赋给admin,第一次显示admin为10,第二次显示为0,两次显示中间没有admin=e2prom_ReadWord(0x0027);如果是这样和eeprom应该没关系 
通过串口打印一下试试
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 21:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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