原来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]
查看更多