新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2020-6-23
- 在线时间
- 4 小时
|
发表于 2020-7-20 20:37:14
|
显示全部楼层
数据发送与接收。 STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是
一个双寄存器,包含了 TDR 和 RDR 。当向该寄存器写数据的时候,串口就会自动发送,当收
到 数据 的时候,也是存在该寄存器内的。
所以你一边读值一边写值不出问题才怪。
有两个办法尝试一下:
1. 收,发用不同的串口。如下图, USART2负责收,UART1负责发。我调试芯片的通断就用这个
void USART2_IRQHandler(void)
{
int8_t Res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
Res=USART_ReceiveData(USART2);
UART1_send_byte(Res);
}
}
2. 如果收,发必须用一个串口,那就错开时间。
void USART3_IRQHandler(void)
{
int8_t Res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
Res=USART_ReceiveData(USART3);
if(RX_STAT <200) RX_BUF(RX_STAT++)=Res//如果收到的程序大于等于200,就停止接收
}
}
主程序
while(1)
{
if(RX_STAT >=200)
{
第一步:重新配置串口,关闭接收功能,和接收中断
第二步,发送数据
第三部,重新配置串口,打开接收功能,和接收中断
第四步, RX_STAT =0;重新开始一轮。
}
}
3. 就是楼上有提到的,用空闲中断,USART_IT_IDLE,开这个中断。当总线空闲了,在执行发送任务。 记得查查怎么用这个中断。
|
|