STM32
直播中

叹久

9年用户 713经验值
擅长:可编程逻辑 光电显示 接口/总线/驱动
私信 关注
[问答]

STM32串口发送一个字符,发送和接收的数据不同是怎么回事?

void usart_Config(void)
{
        /*----------------串口配置----------------*/        
        GPIO_InitTypeDef         GPIO_Struct;
        USART_InitTypeDef        USART_Struct;
        NVIC_InitTypeDef        USART_NVIC_Struct;
        //打开gpio时钟和串口时钟使能
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
        //配置复用功能        
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource10, GPIO_AF_USART3);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource11 , GPIO_AF_USART3);
        //gpio初始化
        GPIO_Struct.GPIO_Pin    = GPIO_Pin_10 | GPIO_Pin_11;
        GPIO_Struct.GPIO_Mode   = GPIO_Mode_AF;
        GPIO_Struct.GPIO_OType  = GPIO_OType_PP;
        GPIO_Struct.GPIO_PuPd   = GPIO_PuPd_UP;
        GPIO_Struct.GPIO_Speed  = GPIO_Speed_50MHz;
        
        //把结构体初始化参数传给寄存器
        GPIO_Init(GPIOB,  GPIO_Struct);
        
        /*----------------串口配置-------------------*/
        
        USART_Struct.USART_BaudRate = 115200;
        USART_Struct.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        USART_Struct.USART_Mode =  USART_Mode_Tx;
        USART_Struct.USART_Parity = USART_Parity_No;
        USART_Struct.USART_StopBits = USART_StopBits_1;
        USART_Struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None ;
        
        USART_Init(USART3,  USART_Struct);
        USART_Cmd(USART3, ENABLE);
        //使能串口接收中断        

        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);         //开启相关中断
        
        USART_NVIC_Struct.NVIC_IRQChannel =  USART3_IRQn ;
        USART_NVIC_Struct.NVIC_IRQChannelPreemptionPriority =3;
        USART_NVIC_Struct.NVIC_IRQChannelSubPriority = 3;
       USART_NVIC_Struct.NVIC_IRQChannelCmd = ENABLE;
        
        NVIC_Init( USART_NVIC_Struct);
}

void USART_SendByte(USART_TypeDef* USARTx, uint8_t Data)
{
        USART_SendData(USARTx, Data);
        while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
}

//main函数
int main(void)
{
        NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2 );
        usart_Config();

        USART_SendByte(USART3, 0xFF);
        while(1);
}

使用的市STM32f407系列的,使用串口3.USB转串口使用的市CP2102芯片。发送的数据和接收的数据不同。一直没找到原因。请求大神帮助。


回帖(1)

李葛葛

2024-4-10 17:59:16
上位机的波特率是不是一致,显示方式是不是16进制
举报

更多回帖

发帖
×
20
完善资料,
赚取积分