我在弄串口这方面问题时遇到几个疑问:
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一样不用中断,只是判断是否发送完成。如果是用中断来发送是否也和接受一样,进入中断,判断是接受还是发送的中断,然后对数据处理,接着退出中断函数?
求大神们指点!!! |