野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20190|回复: 2

关于STM32串口问题

[复制链接]
发表于 2014-7-6 14:15:38 | 显示全部楼层 |阅读模式
我在弄串口这方面问题时遇到几个疑问:
1、火哥的关于接收中断代码如下
void USART1_IRQHandler(void)
{
        uint8_t ch;       
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {        
           ch = USART_ReceiveData(USART1);
                  printf( "%c", ch );          
}          }
判断是接受中断就进行接收数据,完了没有清除中断标志位,是不是退出函数之后会自动清除?还是不需要清除也不会有影响?这里的接受和发送是接收到一个字节就立刻发送一个字节,而不是等接收到一串字符再发送,发送缓冲区只是存一个字节,对吗?

2、关于重定向
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);               
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return (ch);
}

int fgetc(FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(USART1);
}

对int fputc(int ch, FILE *f)这个函数我的理解是C库自带有printf函数,不过不是发送到串口,需要我们重新定义把数据移动发送缓冲区进行发送。

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);这一句是判断是否发送完成。不知道对不对?

3、习惯上发送数据时和51一样不用中断,只是判断是否发送完成。如果是用中断来发送是否也和接受一样,进入中断,判断是接受还是发送的中断,然后对数据处理,接着退出中断函数?

求大神们指点!!!
回复

使用道具 举报

发表于 2014-7-6 22:06:04 | 显示全部楼层
不会,一般都要手动清除中断标志
回复 支持 反对

使用道具 举报

发表于 2014-7-6 22:07:53 | 显示全部楼层
w用hile (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);就是检测发送是否完成,完成了才退出函数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 02:31 , Processed in 0.029885 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表