网站首页 > 技术文章 正文
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);
}
猜你喜欢
- 2024-10-12 STM32单片机-多串口printf()问题与ASCII码解析
- 2024-10-12 stm32F0 串口的几个特殊功能 stm32f1串口引脚
- 2024-10-12 STM32串口发送用哪个中断? stm32f4串口发送数据
- 2024-10-12 STM32F103编程学习——USB虚拟串口篇
- 2024-10-12 STM32F4入坑日记——串口发送数据(非中断)
- 2024-10-12 STM32 HAL库串口中断发送过程 stm32f4串口中断
- 2024-10-12 在货物监控设备研发时,STM32串口第一个字节丢失解怎么解决?
- 2024-10-12 STM32单片机采用环形缓冲区实现串口中断数据接收管理
- 2024-10-12 基于STM32的串口与DMA的完美组合(上)
- 2024-10-12 STM32下载程序新思路--使用串口下载STM32程序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)