[STM8] 使用TM2中断没有问题,多加一个中断就异常

[复制链接]
2594|56
 楼主| lizye 发表于 2021-2-1 23:34 | 显示全部楼层 |阅读模式
使用TM2中断没有问题,多加一个中断就异常
zhanghqi 发表于 2021-2-1 23:37 | 显示全部楼层
什么意思?不是很明白你说的什么,能再解释一下这个现象吗
 楼主| lizye 发表于 2021-2-1 23:39 | 显示全部楼层

工程是EWSTM8-2105版本的,在main函数里面,只有任意开三个中断的其中一个,程序就会死机,这是哪里出了问题?
//UART2_ITConfig(UART2_IT_RXNE , ENABLE);
//UART2_ITConfig(UART2_IT_TC , ENABLE);

//SPI_ITConfig(SPI_IT_TXE, ENABLE);
heweibig 发表于 2021-2-1 23:41 | 显示全部楼层
有没有添加对应的中断回调函数?
xxrs 发表于 2021-2-1 23:43 | 显示全部楼层
EWSTM8还有什么启动文件这么一说的吗?
liuzaiy 发表于 2021-2-1 23:44 | 显示全部楼层
看一下stm8s_it.c貌似可以了呀,怎么回事?
 楼主| lizye 发表于 2021-2-1 23:47 | 显示全部楼层
程序并不复杂啊,难道是EWSTM8的版本有问题?
 楼主| lizye 发表于 2021-2-1 23:49 | 显示全部楼层
不开中断,UART2和SPI都能发送出数据来,再开其中任意一个中断,程序就死机了。
morrisk 发表于 2021-2-1 23:51 | 显示全部楼层
看看中断入口,中断函数有没有问题。
 楼主| lizye 发表于 2021-2-1 23:54 | 显示全部楼层

中断入口是在stm8s_it.c里面,然后调用MAIN.C文件里面的
void UART2_RXD_IRQ(void)
void UART2_TXD_IRQ(void)
void SPI_TXD_IRQ(void)
函数
没看出有问题啊。
 楼主| lizye 发表于 2021-2-1 23:56 | 显示全部楼层
调试跟踪,发现程序会死在 assert_failed函数里面
void assert_failed(u8* file, u32 line)
{
    /* User can add his own implementation to report the file name and line number,
       ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    /* Infinite loop */
    while (1)
    {
    }
 楼主| lizye 发表于 2021-2-1 23:58 | 显示全部楼层
没有用到指针,都是很简单的调试程序。
//------------------------------------------------------------------------------
//接收中断处理
void UART2_RXD_IRQ(void)
{
  UART2_ClearITPendingBit(UART2_IT_RXNE);
  UART2_SendData8(UART2_ReceiveData8());
}

//------------------------------------------------------------------------------
//发送中断处理
void UART2_TXD_IRQ(void)
{
  UART2_ClearITPendingBit(UART2_IT_TC);
}

//------------------------------------------------------------------------------
void SPI_TXD_IRQ(void)
{
  SPI_ITConfig(SPI_IT_TXE,DISABLE);   //禁止中断
  SPI_ClearITPendingBit(SPI_IT_TXE);  //清_中断标志位
  SPI_ClearFlag(SPI_FLAG_TXE);
  SPI_SendData(0x01);
}
sonicll 发表于 2021-2-2 09:25 | 显示全部楼层
assert_failed 这个是参数检查,你肯定是有哪个函数的输入参数不符合规定的类型,你看看此时assert_failed函数的两个变量file和line,检查对应文件的那一行
guoyt 发表于 2021-2-3 21:05 | 显示全部楼层
原来以为是hardfault,刚刚下了程序看了下,应该是参数错误或者说是你的配置错误。
zhaoxqi 发表于 2021-2-3 21:11 | 显示全部楼层
原来以为是hardfault,刚刚下了程序看了下,应该是参数错误或者说是你的配置错误。
jiajs 发表于 2021-2-3 21:14 | 显示全部楼层
你在call stack 看下,是哪个函数调用后,出现错误的。然后再检查一下。
juventus9554 发表于 2021-2-3 21:16 | 显示全部楼层
你用库里面的函数,它会对参数的范围进行有效性检查,不符合要求的,它就把你死锁在那里了。
 楼主| lizye 发表于 2021-2-3 21:18 | 显示全部楼层
您的意思是单步运行吗?
 楼主| lizye 发表于 2021-2-3 21:27 | 显示全部楼层
我又改成TIM4了,不是每次TIM4中断都会出错,不知道程序怎么跑到EWSTM8的库函数了的32位除法里面去了,见图。
chuxh 发表于 2021-2-3 21:30 | 显示全部楼层
感觉是多个中断,会有溢出?为什么会溢出呢?工程的设置,空间足够了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

9757

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部