新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2023-3-13
- 在线时间
- 2 小时
|
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下载进开发板的,开发板上打印的结果是如下乱码
|
|