STM32项目:USART1配置与中断接收

发布者:快乐之源最新更新时间:2025-02-06 来源: jianshu关键字:STM32  USART  配置  中断接收 手机看文章 扫描二维码
随时随地手机看文章

一、简述

本文介绍的是一个.c文件中的内容,主要功能为STM32F101C8T6中USART1的初始化、配置、中断接收以及发送函数。


#include 'stm32f10x.h'

#include 'stm32f10x_gpio.h'

#include 'stm32f10x_usart.h'


u8 USART1_RX_Buff[4] = {0x00, 0x00, 0x00, 0x00};

u8 USART1_RX_Count = 0;


二、USART1初始化与配置

void USART1_Init(u32 bound){

    GPIO_InitTypeDef GPIO_InitStructure;

    USART_InitTypeDef USART_InitStructure;

    NVIC_InitTypeDef NVIC_InitStructure;

    

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);

    

    USART_DeInit(USART1);

    

    //USART1_TX   GPIOA.9

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出

    GPIO_Init(GPIOA,&GPIO_InitStructure);

    

    //USART1_RX      GPIOA.10

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入

    GPIO_Init(GPIOA,&GPIO_InitStructure);

    

    //Usart1 NVIC 配置

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级0

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    

    //USART 初始化设置

    USART_InitStructure.USART_BaudRate = bound;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;

    USART_InitStructure.USART_WordLength = USART_StopBits_1;

    USART_InitStructure.USART_Parity = USART_Parity_No;

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    

    USART_Init(USART1, &USART_InitStructure);

    

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接受中断

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

}


三、中断接收函数

void USART1_IRQHandler(){

    u8 Temp;

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){

        Temp = USART_ReceiveData(USART1); //读取接收到的数据

        if(USARTx_RX_Count < 4){

            USARTx_RX_Buff[USARTx_RX_Count] = Temp;

            USARTx_RX_Count++;

        }

    }

    //溢出-如果发生溢出需要先读SR,再读DR寄存器则可清除不断入中断的问题

    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET){

        USART_ReceiveData(USART1);

        USART_ClearFlag(USART1, USART_FLAG_ORE);

    }   

    USART_ClearFlag(USART1, USART_IT_RXNE); //一定要清除接收中断

}


四、发送函数

void USART1_TxChar(int ch){

    USART_SendData(USART1, (u8)ch); 

    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

}



void USART1_TxStr(char *pt){

    while(*pt != ''){

        USARTx_TxChar(*pt);

        pt++;

    }

}


void USART1_TxCharBuff(u8 buf[], u32 len){

    u32 i;

    for(i = 0; i < len; i++){

        USARTx_TxChar(buf[i]);

    }

}


关键字:STM32  USART  配置  中断接收 引用地址:STM32项目:USART1配置与中断接收

上一篇:STM32汇编程序闪烁LED灯1
下一篇:【STM32学习笔记4.2】GPIO输出模式控制

推荐阅读最新更新时间:2026-03-24 10:47

STM32 HAL 库, 配置串口DMA接收及空闲中断
1、 使用CUBEMX 配置自动生成代码: ①添加串口的DMA 通道 ②使用串口全局中断: 其他的配置就不详细说了。 生成代码后, 打开工程在串口初始化函数中添加代码: /* USART1 init function */ void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Pari
[单片机]
STM32CUBEMX(8)--USART通过定时器中断方式接收不定长数据
概述 本文利用中断实现串口不定长接收(非DMA),使用HAL库,将接收的数据打印出去。 DMA接收请查看:https://blog.csdn.net/qq_24312945/article/details/106557538 硬件准备 首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板: 选择芯片型号 使用STM32CUBEMX选择芯片stm32f030r8,如下所示: 配置时钟源 HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示: 配置时钟树 STM32F0的最高主频到48M,所以配置48即可: 串口配置 本次实验使用的串口1进行
[单片机]
STM32CUBEMX(8)--<font color='red'>USART</font>通过定时器<font color='red'>中断</font>方式<font color='red'>接收</font>不定长数据
【STM32Cube_07】使用USART发送和接收数据(中断模式)
1. 准备工作 硬件准备 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; 准备一个串口调试助手,这里我使用的是Serial Port Utility; Keil MDK和串口助手Serial Port Utility 的安装包都可以在文末关注公众号获取,回复关键字获取相应的安装包: 2.生成MDK工程 — 初始化GPIO为输入 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片STM32L431RCT6: 配置时钟源 如果选择使用外部高速时钟(HSE),则需要在
[单片机]
【STM32Cube_07】使用<font color='red'>USART</font>发送和<font color='red'>接收</font>数据(<font color='red'>中断</font>模式)
STM32F207Cube库函数USART中断接收
USART初始化部分就不介绍了,直接看官方给的例程就能知道,现在主要将自己在学习过程中遇到的问题以及解决方法记录一下。 首先,如果使用了串口接收中断,就需要在初始化中打开中断以及设定中断优先级等常规操作。 HAL_UART_Init(&UartHandle) - HAL_UART_MspInit(huart)- /* Set Interrupt Group Priority */ HAL_NVIC_SetPriority(USARTx_IRQn, 0, 1); /* Enable the TIMx global Interrupt */ HAL_NVIC_EnableIRQ(USARTx_IRQn); 然后需要调用串口接收终端初
[单片机]
stm32 usart奇偶校验如何配置
stm32 usart奇偶校验如何配置?或许你在stm32 usart奇偶校验过程中会遇到如下一些坑,stm32 usart偶校验错误标志位以及出现偶校验错误,奇偶校验位包含在数据位中等等这些可能是你将错误的数据放到DR寄存器中导致的。 在一般情况下,stm32 usart奇偶校验无校验位时,数据位常用8位,当使用就校验位时,数据位应设置为9位。stm32 usart奇偶校验配置方法主要有以下几种: stm32 usart奇偶校验如何配置?如果stm32 usart开启奇偶校验,应在读取数据寄存器时先查看标志位,或者及时进行应用逻辑代码处理,以免发生校验错误标志则丢弃数据等情况出现造成不必要的损失。
[单片机]
<font color='red'>stm32</font> <font color='red'>usart</font>奇偶校验如何<font color='red'>配置</font>
stm32F4 配置串口+DMA 接收不定长数据 串口空闲中断
串口是一种很常见的通讯接口,通过串口回传数据是很多智能型的传感器都拥有的特点。 很多智能型传感器内置单片机 通过单片机将原始的数据处理,然后以串口的形式发送给用户单片机,用户单片机在利用串口得来的信息进行决策。 那么有没有一种简化通讯的方式呢 ?那就是串口 +DMA了! 主要思想: 配置一个串口DMA接收 任务,任务搬运的数据量要大于一次通讯的总数据量(也就是DMA 的搬运工作还没结束 我们的数据就已经搬完了) 然后这时候因为串口的总线 没有数据传输了(数据传输频率不是特别高 完全占用总线的情况下,总线肯定会有一段时间空闲!) 这时候 因为串口的总线空闲会触发一个 串口总线控线中断,在这个中断里面 我们进行数据处理(获取感兴趣
[单片机]
stm32F4 <font color='red'>配置</font>串口+DMA <font color='red'>接收</font>不定长数据 串口空闲<font color='red'>中断</font>
【菜鸟必看】STM32 串口接收不定长数据中断检测相关问题
今天给大家介绍STM32串口接受不定长数据中断检测的相关问题。能够推测,在UART收到最后一帧数据后,假如随后的一个数据帧的时长内未收到新的数据,则IDLE信号有效.假如数据包之间间隔大于一个数据帧,就能够用IDLE信号作为检测数据包完毕的标志. 运用DMA接管UART-Rx数据,当检测到DMA数据满,或DMA数据半满,或UART的IDLE时,读取DMA数据.假如DMA缓存空间足够大(大于最大的数据包长度),也能够只以IDLE信号为标志. 运用类似的思维,能够用3种方式达到. 启用UART的RXNE中断,运用RXNE中断检测第一数据帧,并读取第一个数据,其次启动DMA接管(DMA设置为Normal模式)和IDLE中断,并关闭RXN
[单片机]
STM32 串口接收流程-串口接收中断
串口接收 串口接收流程 编程USARTx_CR1的M位来定义字长。 编程USARTx_CR2的STOP位来定义停止位位数。 编程USARTx_BRR寄存器确定波特率。 使能USARTx_CR1的UE位使能USARTx。 如果进行多缓冲通信,配置USARTx_CR3的DMA使能(DMAT)。 使能USARTx_CR1的RE位为1使能接收器。 如果要使能接收中断(接收到数据后产生中断),使能USARTx_CR1的RXNEIE位为1。 当串口接收到数据时 USARTx_SR(ISR)的RXNE位置1。表明移位寄存器内容已经传输到RDR(DR)寄存器。已经接收到数据并且等待读取。 如果开启了接收数据中断(USART
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved