大家好,我最近在学习STM32f207,最近用到USART,由于板子上只有USART6,所以只能用USART6 ,做实验的时候能发数据,但用超级终端和SSCOM3.2的时候都不能将数据传送给STM32,请问这是怎么回事,下面是代码,我用了查询方式和中断方式都不能让STM32接收数据。
1.主函数部分:
int main(void)
{
vu16 i = 0;
RCC_Configuration();
Usart_GPIO_Configuration();
USART_Configuration();
for(i=0;Txbuffer != ' '; i++)
{
USART_SendData(USART6, Txbuffer);
while(USART_GetFlagStatus(USART6, USART_FLAG_TC) == RESET);
}
while (1)
{
/* 等待USART6接收数据完毕 */
if(USART_GetFlagStatus(USART6, USART_IT_RXNE) == SET)
{
/* 向串口发送接收到的数据 */
USART_SendData(USART6, USART_ReceiveData(USART6));//
while(USART_GetFlagStatus(USART6, USART_FLAG_TC) == RESET);
/* 延时短,保证收发稳定性 */
for(i=0; i<100; i++);//500
}
}
}
2.配置部分:
#include "usart.h"
void Usart_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6 , ENABLE);
/* GPIOG Periph clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG, ENABLE);
/*USARTx_TX -> PC6 , USARTx_RX -PC7*/
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);//GPIO_Pin_6//GPIO_PinSource6
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6);//GPIO_PinSource7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//GPIO_OType_OD;//
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void USART_Configuration(void)
{
/*定义USART初始化结构体 USART_InitStructure*/
USART_InitTypeDef USART_InitStructure;
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; // Receive and transmit enabled
USART_Init(USART6, &USART_InitStructure);
USART_Cmd(USART6, ENABLE);//使能USART6
USART_ClearFlag(USART6, USART_FLAG_TC);
}
就是这样,后面调试的时候发现把主函数部分的“ if(USART_GetFlagStatus(USART6, USART_IT_RXNE) == SET) “改成“ if(USART_GetFlagStatus(USART6, USART_IT_RXNE) != SET)”时,通过SSCOM3.2可以看到stm32在不停的发送数据,可能是由于收到的空数据,所以发的时候也是空白的,
我在一些地方上能到说是由于要用“回车”作为结束符,但在超级终端里面试了没有效果,请高人指点这是怎么回事
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//GPIO_OType_OD;//
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//NOPULL;
既然你选择了串口输入(GPIO的AF模式),你就应该讲该管脚设定为GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
试试吧,能收到数据的。
一周热门 更多>