本帖最后由 zzq11986 于 2017-5-8 10:36 编辑
各位路过大侠请指点:
下面为串口代码:串口2正常接收
void USART2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出-TX
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入-RX
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*串口2参数初始化*/
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2,&USART_InitStructure);
//USART_DeInit(USART2);//复位串口2
USART_Cmd(USART2,ENABLE);/*使能串口2*/
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启串口2接收中断,用到时开启
NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStructure);//中断初始化
}
void USART2_IRQHandler(void) //中断请求处理函数
{
u8 res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
res= USART_ReceiveData(USART2); //接收串口2数据
USART_SendData(USART2,res); //将res发送给USART2
}
}
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//将中断优先级设置为组2
USART2_Init();
while(1);
}
下面为串口3代码、电路板连接图片和串口软件图片,串口发出来的数据,电脑接收为乱码
void USART3_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART3时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出-TX
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入-RX
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*串口3参数初始化*/
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3,&USART_InitStructure);
//USART_DeInit(USART2);//复位串口3
USART_Cmd(USART3,ENABLE);/*使能串口3*/
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//开启串口3接收中断,用到时开启
NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStructure);//中断初始化
}
void USART3_IRQHandler(void) //中断请求处理函数
{
u8 res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
res= USART_ReceiveData(USART3); //接收串口3数据
USART_SendData(USART3,res); //将res发送给USART3
}
}
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//将中断优先级设置为组2
USART3_Init();
while(1);
电脑收到的乱码
请各位高手帮帮忙,小弟在这先谢谢了!!!
那基本可以肯定是你代码bug了
你好,我感觉应该不是代码的问题啊,如果是代码的问题,那我换个DB9接口应该也不行啊,请原子哥祥解
是的,用COM2的DB9连接到PB10 PB11就可以,用COM3的DB9就不可以
即便我选择了16进制和我发送的不一样
一周热门 更多>