新手入门
- 积分
- 1
- 金钱
- 1
- 注册时间
- 2021-11-8
- 在线时间
- 0 小时
|
本帖最后由 giogiogio 于 2021-11-8 20:40 编辑
在用stm32f103c8t6进行串口实验时,实现简单上位机发送数据,单片机接收数据并将该数据返回,程序写完后在串口调试助手中,能够正常发送数据和接收数据,但接收数据与发送数据不一致,如下图所示,想问问大佬该如何解决?
附代码:
#include "stm32f10x.h"
void My_USART_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能串口A时钟
//初始化PA9引脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//初始化PA10引脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//串口初始化
USART_InitStructure.USART_BaudRate=115200;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStructure);
//使能串口1
USART_Cmd(USART1,ENABLE);
//开启接收中断
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//初始化中断响应优先级
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStructure);
}
//中断服务子函数
void USART1_IRQHandler(void)
{
u8 res; //定义接收数据变量
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
res=USART_ReceiveData(USART1); //接收数据并将数据存储
USART_SendData(USART1,res); //将接收到的数据发送
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为2
My_USART_Init();
while(1);
}
|
|