移植freemodbus到RTT出assert_failed问题[已解决]

发布于 2013-09-02 23:35:26
原来stm32f103zet6裸机跑没问题的程序移植到RTT1.1.1出的问题,现象如下:
串口中断出assert_failed问题,报告位置stm32f10x_usart.c 1035行

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint16_t bitpos = 0x00, itmask = 0x00;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_IT(USART_IT));
/* The CTS interrupt is not available for UART4 and UART5 */
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}

bitpos = USART_IT >> 0x08;
itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
USARTx->SR = (uint16_t)~itmask;
}


中断加清楚溢出中断标志也没用,下面是串口中断代码
void USART1_IRQHandler(void)
{
/* enter interrupt */
rt_interrupt_enter();

if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
prvvUARTRxISR();

USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}

if(USART_GetITStatus(USART1, USART_IT_TXE) == SET)
{
prvvUARTTxReadyISR();
USART_ClearITPendingBit(USART1, USART_IT_TXE);
}

/* leave interrupt */
rt_interrupt_leave();
}


freemodbus开关中断用的
#define ENTER_CRITICAL_SECTION( ) __disable_irq()
#define EXIT_CRITICAL_SECTION( ) __enable_irq()

因为rttde开关中断有个level变量,用过去不方便

google baidu 都没解决,不知道是不是底层冲突?

网上找了个stm32f103cb的,也移植到RTT 1.1.1,他的没问题,但是他的目录改的面目全非,没找到什么特别的地方
不想直接用他的,毕竟改了目录不方便以后升级RTT等工作。

望各位大神指点个方向 [s:183]

查看更多

关注者
0
被浏览
3.4k
5 个回答
aozima
aozima 2013-09-03
拒绝白嫖,拒绝键盘侠!
1. 开关中断可能会有嵌套,如果直接开了中断,则。。
2.
原来stm32f103zet6裸机跑没问题的程序移植到RTT1.1.1出的问题

说明原来程序就有问题,只是没开参数检查你没发现。
USART_ClearITPendingBit(USART1, USART_IT_TXE);

#define IS_USART_CLEAR_IT(IT) (((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || 
((IT) == USART_IT_LBD) || ((IT) == USART_IT_CTS))

并没有USART_IT_TXE,说明USART_IT_TXE是不用这样手动清除的。
jeffwei
jeffwei 2013-09-03
这指点够准的,我把这句注释掉一试就灵 [s:154]
armink
armink 2013-10-16
是在这个博客下载的程序吗? (我是作者)
如果是,你出错的原因是因为STM32的发送缓冲区空中断即USART_IT_TXE不需要手动清空,自然这个断言过不去,把清中断那句话去掉即可,对整个软件没有影响,我的最新软件已经去掉了。。
jeffwei
jeffwei 2013-10-16
是在这个博客下载的程序吗? (我是作者)
如果是,你出错的原因是因为STM32的发送缓冲区空中断即USART_IT_TXE不需要手动清空,自然这个断言过不去,把清中断那句话去掉即可,对整个软件没有影响,我的最新软件已经去掉了。。

那个问题的确是操作错了

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览