汇集网友智慧,解决技术难题
发送 函数 空闲中断 MM32G0001 MM32 串口空闲中断
赞0
评论
2024-07-04
2024-07-03
桑有槐 发表于 2024-7-3 16:22 void USART1_IRQHandler(void) { int a=0;
点击图片添加到编辑器内容中
点击文件名将附件添加到文章中
提交
tyw
315个答案
天意无罪
284个答案
xch
206个答案
jjjyufan
197个答案
coody
187个答案
LcwSwust
144个答案
chunyang
135个答案
tpgf
110个答案
赞0
void USART1_IRQHandler(void)
{
uint16_t status = USART1->SR; //read SR only once
if ( status & USART_IT_RXNE )
{
RX_one[i ++ ] = USART1->>DR;
USART1->CR1 |= USART_CR1_IDLEIEN; //启用空闲中断
//......
}
if (( status & USART_IT_IDLE )&&(USART1->CR1 & USART_CR1_IDLEIEN ) )
{
USART1->CR1 &= ~USART_CR1_IDLEIEN; //禁止空闲中断
USART1->DR;
//....................
}
}
评论
2024-07-04
@桑有槐 :禁止空闲中断了怎么还进去?
@xch :现在是按照你的这个写的,发现空闲中断是,接收数据前进入了一次,接收完数据后又进入了一次。不管在接收数据前有没有开启空闲中断都是这样
@桑有槐 :初始化时不开空闲中断。仅收到一个字符后才开空闲中断。
MM32G0001用户手册里面写的是“空闲状态为总线在开始发送或者开始接收前的初始状态。”,好像每次接受前都会进入一次空闲中断
赞0
{
uint16_t status = USART1->SR; //read SR only once
if ( status & USART_IT_RXNE )
{
RX_one[i ++ ] = USART1->>DR;
//......
}
if ( status & USART_IT_IDLE )
{
USART1->DR;
volatile uint16_t test_sr =0;
test_sr = USART1->SR; //给寄存器照个快照
while(1)
{
test_sr &= USART_IT_IDLE ;
}
//....................
}
}
评论
2024-07-04
我没太看懂这个....为什么要写一个while(1)啊
赞0
评论
2024-07-04
是因为有别的地方读取了SR和DR吗?
赞0
{
uint16_t status = USART1->SR; //read SR only once
if ( status & USART_IT_RXNE )
{
RX_one[i ++ ] = USART1->>DR;
//......
}
if ( status & USART_IT_IDLE )
{
USART->DR;
//....................
}
}
试试。
评论
2024-07-03
@桑有槐 :可能是又空闲了会再次中断。
还是不行,一直在进空闲中断
赞0
可能读多次SR 再读DR就没法清除了。
评论
2024-07-03
赞0
{
int a=0;
if ((RESET != USART_GetITStatus(USART1, USART_IT_PE)) ||
(RESET != USART_GetITStatus(USART1, USART_IT_ERR)))
{
a=USART1->SR;
a=USART1->DR;//软件序列清除IDLE标志位
USART_SendData(USART1,52);
}
if (RESET != USART_GetITStatus(USART1, USART_IT_RXNE))
{
RX_one[i] = USART_ReceiveData(USART1);
RX_flat = 0;
USART_SendData(USART1,RX_one[i]);
i++;
}
if (RESET != USART_GetITStatus(USART1, USART_IT_IDLE))
{
a=USART1->SR;
a=USART1->DR;//软件序列清除IDLE标志位
RX_one[i] = '\0';USART_SendData(USART1,53);
RX_flat = 1;
}
}
评论
2024-07-03
赞0
评论
2024-07-03
赞0
评论
2024-07-03
您需要登录后才可以回复 登录 | 注册