STM32 ZET6 144P 串口4 串口5,死在中断里,不出来,哪位大神帮我看一下。全部积分奉送 100
初学STM32,整了两天了,网上说过载了,我加进去了,不行,只要什么都不写,voidUART5_IRQHandler(void){if(USART_GetITStatus...
初学STM32,整了两天了,网上说过载了,我加进去了,不行,只要什么都不写,
void UART5_IRQHandler(void)
{
if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)
{
USART_SendData(UART5, 0x03);
// USART_ClearITPendingBit(UART5, USART_IT_RXNE);//Çå³þ±ê־λ
}
}
这样,你随便给他发一个,进了中断,他就一直发03过来,按程序应该只发一次,他一直发,然后就死了,如果打开下面那一句,直接不进了。
麻烦大神帮我看下,积分全部给了 展开
void UART5_IRQHandler(void)
{
if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)
{
USART_SendData(UART5, 0x03);
// USART_ClearITPendingBit(UART5, USART_IT_RXNE);//Çå³þ±ê־λ
}
}
这样,你随便给他发一个,进了中断,他就一直发03过来,按程序应该只发一次,他一直发,然后就死了,如果打开下面那一句,直接不进了。
麻烦大神帮我看下,积分全部给了 展开
2个回答
展开全部
USART_IT_RXNE 是接收中断.
USART_IT_TXE 才是发生中断.
static char DTs[512];//发送缓冲空间
static volatile uint16_t DTCursorTop=0;
static volatile uint16_t DTCursorEnd=0;
void UART5_IRQHandler(void)
{ 雀宽裤
//接收顷简寄存器非空
if(USART_GetITStatus(UART5, USART_IT_RXNE ) != RESET)
{
char Data = UART5->DR;//抱歉不喜欢用函数调用.中断的地方能节省运行时间就节省运行时间
}
//发送寄存器为空
if(USART_GetITStatus(UART5, USART_IT_TXE ) != RESET)
{
if(DTCursorTop == DTCursorEnd){
Open_USARTx->CR1 &= 0xff7f;//发送完成清除中断发送标志位
}
else{
UART5->DR = DTs[(DTCursorTop++)&0x1ff];//= 0x03;
巧雀 //USART_SendData(UART5, 0x03);
//两条语句是一样的功能,下面的会产生多余的指令和占用更多的堆栈空间
}
}
}
int sendchar(int ch){
while((((DTCursorTop-DTCursorEnd)&0x1ff) ==1)){
// UART5->CR1 |= 0x80;//ÖÃλ·¢ËÍÖжÏ;//µ½´ï»·Ðνáβ
}
DTs[(DTCursorEnd++)&0x1ff] = ch;
UART5->CR1 |= USART_CR1_TXEIE;//置位触发发送中断
return 0;
} /* in Serial.c */
你用错参数了. 纯手工编写,不是网上复制粘贴的.
追问
我就是接受中断不对,发送只是为了验证下我进中断没有,或者进了中断的状态
我没用发送中断,不能传文件,不然直接给你看。我注释的那条语句,注释了,就一直死在中断里,就是不停的发送0x03,不注释掉就直接不发送,是否进入中断不清楚,由于我的JTAG和端口冲突,我也没调试,看到底进中断没有。
追答
进了中断,而且启动了发送中断,你的中断时发送寄存器为空触发进入发送,发送完了又触发.
USART_IT_RXNE 是接收中断.
USART_IT_TXE 才是发生中断.
你把 USART_IT_RXNE 改为 USART_IT_TXE
如果中断有触发则单片机收到一个字节就会反馈一个0x03
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询