打印
[应用相关]

stm32f103c8t6串口 usart1只能发送不能接受

[复制链接]
501|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
逢dududu必shu|  楼主 | 2022-2-27 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这几天一直在搞毕设,需要通过串口用电脑控制单片机,用的是usart1,调了好几天,死活就是只能发送数据,不能接受数据,下面是我的配置函数和串口中断处理函数,求指导!!!

<span style="color: rgb(34, 34, 38); font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif,="" simhei,="" simsun;="" font-variant-ligatures:="" common-ligatures;"="">//串口引脚初始化</span>
<span style="color: rgb(34, 34, 38); font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif,="" simhei,="" simsun;="" font-variant-ligatures:="" common-ligatures;"="">void Init_Usart(void)</span>
<span style="color: rgb(34, 34, 38); font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif,="" simhei,="" simsun;="" font-variant-ligatures:="" common-ligatures;"="">{</span>
<span style="color: rgb(34, 34, 38); font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif,="" simhei,="" simsun;="" font-variant-ligatures:="" common-ligatures;"="">GPIO_InitTypeDef GPIO_InitStructure;</span>

<span style="color: rgb(34, 34, 38); font-family: -apple-system, " sf="" ui="" text",="" arial,="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei",="" "wenquanyi="" micro="" hei",="" sans-serif,="" simhei,="" simsun;="" font-variant-ligatures:="" common-ligatures;"="">RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);</span>
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);                     

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   
GPIO_Init(GPIOA, &GPIO_InitStructure);                  


使用特权

评论回复
沙发
逢dududu必shu|  楼主 | 2022-2-27 22:08 | 只看该作者
}

//串口配置函数
void Usart_Configuration(uint32_t BaudRate)
{
USART_InitTypeDef USART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
USART_InitStructure.USART_BaudRate =BaudRate ;

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);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

USART_Cmd(USART1, ENABLE);

}

//串口中断处理函数
void USART1_IRQHandler(void)
{
uint8_t ReceiveDate;

if(!(USART_GetITStatus(USART1,USART_IT_RXNE)))

使用特权

评论回复
板凳
逢dududu必shu|  楼主 | 2022-2-27 22:10 | 只看该作者
{
    USART_ClearITPendingBit(USART1,USART_IT_RXNE);  
    ReceiveDate=USART_ReceiveData(USART1);         
    printf("%d",(char *)ReceiveDate);               

    printf("\n\r");                                 
}  

使用特权

评论回复
地板
逢dududu必shu|  楼主 | 2022-2-27 22:12 | 只看该作者
}
//串口中断NVIC配置函数
void Init_NVIC(void)
{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM

使用特权

评论回复
5
逢dududu必shu|  楼主 | 2022-2-27 22:14 | 只看该作者
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);   
#else  

  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);                                                  
#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;           
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            
NVIC_Init(&NVIC_InitStructure);                                 
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

使用特权

评论回复
6
逢dududu必shu|  楼主 | 2022-2-27 22:14 | 只看该作者
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
}

调了好几天了,实在是高不出来了,求大神指导!!!!!

使用特权

评论回复
7
diweo| | 2022-2-28 10:28 | 只看该作者
F103参考手册V10上是这么写的:
RXNE:读数据寄存器非空 (Read data register not empty)
当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。如果USART_CR1寄存器中的RXNEIE为1,则产生中断。对USART_DR的读操作可以将该位清零。RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。
0:数据没有收到;
1:收到数据,可以读出。

现在你配置了中断却收不到数据,那就先看RXNE这里有没有置位。
如果RXNE置位了但没中断,那么看看RXNEIE有没有置位。
如果RXNEIE也置位了但没中断,那就再看NVIC相关位有没有置位。


出现问题的时候,不要老盯着代码看,纠结于和例程写的是否一样,而是要学会看寄存器然后分析原因。

使用特权

评论回复
8
香水城| | 2022-2-28 10:52 | 只看该作者
先不管Printf,你看看你的ReceiveDate里到底有没有数据。

等到ReceiveDate里有数据了再来看看printf。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

460

帖子

1

粉丝