野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17474|回复: 4

串口通信例程里头的一个语句

[复制链接]
发表于 2014-7-27 21:38:41 | 显示全部楼层 |阅读模式
串口通信 printf(interrupt)例程里头的函数
void USART1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

/* config USART1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

/* USART1 GPIO config */
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);   
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* USART1 mode config */
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);

/* 使能串口1接收中断 */
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_Cmd(USART1, ENABLE);
}请问火哥这个函数里面为什么要加USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);刚开始为什么要使状态寄存器的RXNE为1产生中断啊?PC机又没有发送数据,产生这个中断后,中断函数void USART1_IRQHandler(void)
{
uint8_t ch;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{  
     //ch = USART1->DR;
   ch = USART_ReceiveData(USART1);
    printf( "%c", ch );    //将接受到的数据直接返回打印
} 里面USART_ReceiveData(USART1);好像也取不到值吧。。
回复

使用道具 举报

发表于 2014-7-28 09:14:52 | 显示全部楼层
就是等待pc机发送数据,如果接收到pc机的数据就把该数据再返回pc机,是一个演示如何使用中断的例子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-1 13:04:56 | 显示全部楼层
子车梨祎 发表于 2014-7-28 09:14
就是等待pc机发送数据,如果接收到pc机的数据就把该数据再返回pc机,是一个演示如何使用中断的例子

我还想麻烦问下您,就是刚开始PC机还没发送数据时USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);这个语句就把中断打开,然后进入中断,然后中断里头ch = USART_ReceiveData(USART1);这个语句就是读取USART1数据寄存器里的数据,但是这是在PC机没有发送数据的时候就执行了的,这时读的是什么数据呢?这个数据还会通过printf( "%c", ch );在PC机上打印出来吧? 麻烦您解答一下,谢了~   
回复 支持 反对

使用道具 举报

发表于 2014-8-1 13:10:17 | 显示全部楼层
供用户而我国 发表于 2014-8-1 13:04
我还想麻烦问下您,就是刚开始PC机还没发送数据时USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);这个语 ...

pc机发送数据才会进入串口中断
回复 支持 反对

使用道具 举报

发表于 2014-8-1 13:17:17 | 显示全部楼层
供用户而我国 发表于 2014-8-1 13:04
我还想麻烦问下您,就是刚开始PC机还没发送数据时USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);这个语 ...

因为是串口接收中断,只有在单片机的串口接收到数据了,就是接受寄存器里面有数据了,才会进入到接收中断函数,然后处理中断里面的东西。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 12:39 , Processed in 0.028987 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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