打印
[STM8]

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

[复制链接]
1806|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 | 只看该作者
有没有添加对应的中断回调函数?

使用特权

评论回复
5
xxrs| | 2021-2-1 23:43 | 只看该作者
EWSTM8还有什么启动文件这么一说的吗?

使用特权

评论回复
6
liuzaiy| | 2021-2-1 23:44 | 只看该作者
看一下stm8s_it.c貌似可以了呀,怎么回事?

使用特权

评论回复
7
lizye|  楼主 | 2021-2-1 23:47 | 只看该作者
程序并不复杂啊,难道是EWSTM8的版本有问题?

使用特权

评论回复
8
lizye|  楼主 | 2021-2-1 23:49 | 只看该作者
不开中断,UART2和SPI都能发送出数据来,再开其中任意一个中断,程序就死机了。

使用特权

评论回复
9
morrisk| | 2021-2-1 23:51 | 只看该作者
看看中断入口,中断函数有没有问题。

使用特权

评论回复
10
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)
函数
没看出有问题啊。

使用特权

评论回复
11
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)
    {
    }

使用特权

评论回复
12
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);
}

使用特权

评论回复
13
sonicll| | 2021-2-2 09:25 | 只看该作者
assert_failed 这个是参数检查,你肯定是有哪个函数的输入参数不符合规定的类型,你看看此时assert_failed函数的两个变量file和line,检查对应文件的那一行

使用特权

评论回复
14
guoyt| | 2021-2-3 21:05 | 只看该作者
原来以为是hardfault,刚刚下了程序看了下,应该是参数错误或者说是你的配置错误。

使用特权

评论回复
15
zhaoxqi| | 2021-2-3 21:11 | 只看该作者
原来以为是hardfault,刚刚下了程序看了下,应该是参数错误或者说是你的配置错误。

使用特权

评论回复
16
jiajs| | 2021-2-3 21:14 | 只看该作者
你在call stack 看下,是哪个函数调用后,出现错误的。然后再检查一下。

使用特权

评论回复
17
juventus9554| | 2021-2-3 21:16 | 只看该作者
你用库里面的函数,它会对参数的范围进行有效性检查,不符合要求的,它就把你死锁在那里了。

使用特权

评论回复
18
lizye|  楼主 | 2021-2-3 21:18 | 只看该作者
您的意思是单步运行吗?

使用特权

评论回复
19
lizye|  楼主 | 2021-2-3 21:27 | 只看该作者
我又改成TIM4了,不是每次TIM4中断都会出错,不知道程序怎么跑到EWSTM8的库函数了的32位除法里面去了,见图。

使用特权

评论回复
20
chuxh| | 2021-2-3 21:30 | 只看该作者
感觉是多个中断,会有溢出?为什么会溢出呢?工程的设置,空间足够了吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

9757

帖子

2

粉丝