OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4082|回复: 0

XCOM串口输出实验输出乱码

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2023-3-13
在线时间
2 小时
发表于 2023-4-14 11:05:05 | 显示全部楼层 |阅读模式
1金钱
代码部分

#include "stm32f10x.h"


void My_USART1_Init(void)
{
        //定义
        GPIO_InitTypeDef GPIO_InitStructure; //定义此变量用于GPIO端口模式设置
        USART_InitTypeDef USART_InitStructure;//定义此变量用于初始化串口
        NVIC_InitTypeDef NVIC_InitStructure; //定义此变量用于初始化NVIC设置相应中断的抢占优先级和响应优先级
       
       
        //步骤1:串口时钟使能
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能串口A,ENABLE表示使能
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能串口1,ENABLE表示使能
       
        //步骤2:串口复位(非必须步骤!)
       
        //步骤3:GPIO端口模式设置(模式由查表所得)
        //初始化GPIOA9
        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);
        //初始化GPIOA10
        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);
       
        //步骤4:串口初始化
        //等下用电脑与开发板通信的时候也需要设置串口的相关参数,这些参数依然要设置为这些值
        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);//使能串口USART1
       
        //步骤5:开启中断并且初始化NVIC(如果有需要开启中断才需要这个步骤,此处并不需要,所以没有进行此步骤)
        //需要先进行中断优先级分组设置(此步骤在下方main函数块中进行的)
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断:第一个参数是设置哪一个串口的中断,第二个参数是确定使能中断的类型,此处是开启接收中断故需要的是接收缓冲区非空的中断类型,第三个参数是是否使能
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//设置中断通道
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//设置是否开启中断通道(参考是否使能)
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//设置抢占优先级,由于此处设置的中断优先级分组为2,所以可以设置的值为0~3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//设置子优先级
        NVIC_Init(&NVIC_InitStructure);//这一步是初始化NVIC,即设置相应中断的抢占优先级和响应优先级
       
        //步骤6:串口使能(使用USART_Cmd函数)
        USART_Cmd(USART1, ENABLE);
       
        //步骤9:串口输出状态获取
       
}

//步骤7:编写中断处理函数
void USART1_IRQHandler(void)
{
        u8 res;//定义此数据用来存储从串口1获取到的数据
       
        ////步骤8:串口数据收发
        if(USART_GetITStatus(USART1, USART_IT_RXNE))  //第一个参数是串口名,第二个参数是确定中断类型(此处接收缓冲区非空),函数返回值是1即是接收中断
        {
                res = USART_ReceiveData(USART1);//此函数用于读取串口1获取到的数据
                USART_SendData(USART1, res);//此函数第一个参数是发送的串口,第二个参数是发送的数据
        }
}

int main(void)
{       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//将系统的中断优先级分组设置为2:,即设置两位的响应优先级和两位的抢占优先级
        My_USART1_Init();//调用初始化函数
        while(1);
}


描述:视频上用j-link连接的,我直接在flymcu下载进开发板的,开发板上打印的结果是如下乱码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 13:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表