计算机系统应用教程网站

网站首页 > 技术文章 正文

每日小结2.stm32 串口配置一般步骤(库函数)

btikc 2024-10-12 11:45:01 技术文章 8 ℃ 0 评论

stm32 串口配置一般步骤(库函数):

①外设时钟使能

串口时钟使能

RCC_APB2PeriphClockCmd();

②GPIO端口模式设置:GPIO_Init(); 根据手册设置输出模式开漏输出 、 推挽式输出 、 推挽式复用功能 、开漏复用功能。按键实验时有输入模式:输入浮空 、输入上拉 、 输入下拉 、 模拟输入。

③串口初始化:USART_Init();

④串口使能:USART_Cmd();

⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

USART_ITConfig();

NVIC_Init();

⑥编写中断处理函数:USARTx_IRQHandler();

⑦串口数据收发:

USART_SendData();//*发送数据到串口,DR

USART_ReceiveData();//*接受数据,从DR读取接受到的数据


跟着视频写的函数:

#include "stm32f10x.h"

#include "delay.h"

void My_USART1_Init()

{

GPIO_InitTypeDef GPIO_InitStruct;//引脚初始化结构体变量

USART_InitTypeDef USART_InitStruct;//串口初始化结构体变量

NVIC_InitTypeDef NVIC_InitStruct;//中断设置抢占优先级和响应优先级结构体变量


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO_A外设时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能


GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//GPIO_Mode_AIN模拟输入、

//..._I N_FLOATING输入浮空、..._IPD下拉输入、...IPU上拉输入、

//..._OUT_OD开漏输出、..._OUT_PP推挽输出、..._AFOD开漏复用、..._AF_PP推挽复用

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//2M、10M、50M

GPIO_Init(GPIOA,&GPIO_InitStruct);//GPIO_A9引脚初始化,为usart1的发送端


GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStruct);//GPIO_A10引脚初始化,为usart1的接收端


USART_InitStruct.USART_BaudRate=9600;

USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx ;

USART_InitStruct.USART_Parity=USART_Parity_No;

USART_InitStruct.USART_StopBits=USART_StopBits_1;

USART_InitStruct.USART_WordLength=USART_WordLength_8b;

USART_Init(USART1,&USART_InitStruct);//串口1结构体变量初始化


USART_Cmd(USART1,ENABLE);//串口1使能


USART_ITConfig(USART1,USART_IT_RXNE ,ENABLE);//开启usart1接收中断,RXNE:收到数据时打开




NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn; //stm32f10x.h

NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;

NVIC_Init(&NVIC_InitStruct);//针对每个中断,设置对应的抢占优先级和响应优先级

}

void USART1_IRQHandler()//startup_stm32f10x_hd.s

//中断服务函数

{

u8 res;

if(USART_GetITStatus(USART1,USART_IT_RXNE)){

res=USART_ReceiveData(USART1);//接收数据

USART_SendData(USART1,res);//发送数据到串口调试助手


}


}

intmain(void )

{

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组

My_USART1_Init();

while(1);


}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表