stm32之11.USART串口通信

news2025/1/16 13:50:39

可以添加上拉电阻,但会增加功耗,传输距离变长

  要添加库函数USART

 官方参考文档说明书位置

 ALT+左键可实现整体删除(如下图)

 输出模式第三种模式AF

----------------------

源码 

 远程控制pc端

#include <stm32f4xx.h>
#include "led.h"
#include "key.h"

#include "stdio.h"
    

//#define BIT_BAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))

#define PFout(n) (*(volatile uint32_t *)(0x42000000+(GPIOF_BASE+0x14-0x40000000)*32+(n)*4))
#define PAin(n) (*(volatile uint32_t *)(0x42000000+(GPIOA_BASE+0x10-0x40000000)*32+(n)*4))
#define PEout(n) (*(volatile uint32_t *)(0x42000000+(GPIOE_BASE+0x14-0x40000000)*32+(n)*4))
#define PEin(n) (*(volatile uint32_t *)(0x42000000+(GPIOE_BASE+0x10-0x40000000)*32+(n)*4))
    
static     GPIO_InitTypeDef GPIO_InitStructure;
static     USART_InitTypeDef USART_InitStructure;
static     NVIC_InitTypeDef NVIC_InitStructure;

void usart1_init(uint32_t baud)
{

    //端口A硬件时钟打开
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    
    //串口1硬件时钟打开
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    
    //配置PA9 PA10为AF模式(复用功能)
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 | GPIO_Pin_10 ;     //9 10号引脚
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;//输出模式第三种模式AF模式
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;//高速,速度越高,响应越快,但是功耗会更高
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;//不使能上下拉电阻
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    //由于引脚支持很多功能,需要指定该引脚的功能,当前要制定支持USART1
    
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
    
    //配置USART1相关参数:波特率,数据位,停止位,校验位
    
    USART_InitStructure.USART_BaudRate = baud;   //波特率,就是通信的速度
    USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8位数据位
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  //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);
    
    //配置中断触发方式,接收到一个字节,就通知CPU处理
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    
    //NVIC配置其优先级
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  //中断号
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   //抢占优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;      //响应优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    //打开通道给NVIC管理
    NVIC_Init(&NVIC_InitStructure);
    
    //使能USART1工作
    USART_Cmd(USART1, ENABLE);
    
    
    
}
//发送数据
void usart1_send_str(const char *str)
{

     const char * p = str;
    while(*p!='\0')
    {
        //发送一个字节
        USART_SendData(USART1,*p);
        p++;
        //等待发送完毕
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
    }
}

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
        //抢占优先级0~3,支持4级!
    //响应优先级0~3,支持4级!
    key_init();
    Led_init();
    //初始化串口1波特率位115200bps,若发送/接收数据有乱码,请检查PLL
    
    usart1_init(115200);
    usart1_send_str("hello5555\r\n");
    while(1){

    
        }
    
}

void USART1_IRQHandler(void)
{
    static uint8_t d;
    if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET)
    {
        d=USART_ReceiveData(USART1);
        
        
        if(d == 'A')PFout(9)=0;
        if(d == 'a')PFout(9)=1;    
        
        //告诉CPU,已经完成接收中断请求,可以响应新的接收中断请求
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
    
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ACL2023] Exploring Lottery Prompts for Pre-trained Language Models

Exploring Lottery Prompts for Pre-trained Language Models 文章链接 清深的工作&#xff0c;比较有意思的一篇。作者先给出假设&#xff0c;对于分类问题&#xff0c;在有限的语料空间内总能找到一个prompt让这个问题分类正确&#xff0c;作者称之为lottery prompt。为此&…

windows窗口背景色修改方法

windows也不知道什么时候将notepad, word, vs的背景色由白色变成了浅绿色&#xff0c;用了一段时间没去改觉得麻烦&#xff0c;就一直用下去了&#xff0c;今天有时间找了下方法改回了白色。 1. 被动默认浅绿色效果 2. 修改注册表. 保存&#xff0c;重启电脑. 3. 恢复如初.

[LeetCode周赛复盘] 第 111 场双周赛20230819

[LeetCode周赛复盘] 第 111 场双周赛20230819 一、本周周赛总结2824. 统计和小于目标的下标对数目1. 题目描述2. 思路分析3. 代码实现 2825. 循环增长使字符串子序列等于另一个字符串1. 题目描述2. 思路分析3. 代码实现 2826. 将三个组排序1. 题目描述2. 思路分析3. 代码实现 …

element纯前端table分页

<template><div class"boxs"><div class"close" click"closeShow()"><img src"./image/close.png"></div><div class"title">一舟储能峰谷收益统计数据</div><div class"…

计算机安全学习笔记(II):自主访问控制 - DAC

书接上篇博客&#xff0c;自主访问方案是指一个实体可以被授权按其自己的意志使另一个实体能够访问某些资源。DAC的一种通常访问方式是在操作系统或数据库管理系统中运用的访问矩阵(access matrix)。 矩阵中的一维由试图访问资源的被标识的主体组成。这个列表一般由用户或用户…

【核磁共振成像】方格化重建

目录 一、缩放比例二、方格化变换的基础三、重建时间四、方格化核 一、缩放比例 对于笛卡尔K空间直线轨迹数据可直接用FFT重建&#xff0c;而如果K空间轨迹的任何部分都是非均匀取样的 可用DFT直接重建&#xff0c;有时称为共轭相位重建&#xff0c;但此法太慢不实用。把数据再…

js、PHP连接外卖小票机打印机方案(调用佳博、芯烨等)

前言&#xff1a; 目前开发需要用到电脑直接连接外卖小票机打印小票&#xff0c;查阅各种资料&#xff0c;使用 6612345浏览器 终于解决了这个问题。 效果&#xff1a; PHP、js直接连接小票机并且自动出票。 支持的小票机&#xff1a; 目前测试可以的有&#xff1a;电脑A4打印…

【TI毫米波雷达笔记】SOC外设初始化配置及驱动(以IWR6843AOP为例)

【TI毫米波雷达笔记】SOC外设初始化配置及驱动&#xff08;以IWR6843AOP为例&#xff09; 最基本的工程建立好以后 需要给SOC进行初始化配置 SOC_Cfg socCfg; //SOC配置结构体Task_Params taskParams; //任务参数SOC_Handle socHandle;ESM_init(0U); …

网络安全工程师岗位分类-徐庆臣(黑客洗白者)

研发系&#xff1a; 安全研发、安全攻防研究、逆向分析、云计算研究、机器安全 工程系&#xff1a; 安全工程师、安全运维工程师、安全服务工程师、安全技术支持、安全售后、Web渗透测试工程师、Web安全工程师、应用安全审计、移动安全工程师 销售系&#xff1a; 安全销售…

数字孪生:重塑制造、医疗和能源等领域的未来

数字孪生技术&#xff0c;作为虚拟仿真的重要领域&#xff0c;正以其强大的能力在各个行业中创造前所未有的创新。本文带大家一起深入探讨数字孪生技术在不同领域的广泛应用场景&#xff0c;展示其在实现效率、可靠性和智能化方面的积极影响。 制造业与工业领域 数字孪生技术在…

力扣 337. 打家劫舍 III

题目来源&#xff1a;https://leetcode.cn/problems/house-robber-iii/description/ C题解1&#xff08;来源代码随想录&#xff09;&#xff1a;本题一定是要后序遍历&#xff0c;因为通过递归函数的返回值来做下一步计算。本题关键是要讨论当前节点抢还是不抢。如果抢了当前节…

Java--abstract class 与 interface的区别

在Java语言中&#xff0c;abstract class和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在&#xff0c;才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性&#xff0c;甚至可以相互替换&#xff0c;…

【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析

【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析 1 题目 一、问题背景 近年来&#xff0c;随着智能手机的产生&#xff0c;发展到爆炸式的普及增长&#xff0c;不仅推动了中 国智能手机市场的发展和扩大&#xff0c;还快速的促进手机软件的开发。近年中国智能…

Linux操作系统--linux环境搭建(2)

在上一小节中,我们已经把CentOS和VMware下载和安装做好了,下面我们使用VMware创建一个虚拟机,如下 1.Vmware创建虚拟机 下面我们开始创建一个新的虚拟机。这里操作就类似于我们攒一个电脑,我们呢先把电脑攒出来,然后再给电脑安装操作系统,这样就可以开始使用这一台电脑了…

【C++】—— C++11新特性之 “右值引用和移动语义”

前言&#xff1a; 本期&#xff0c;我们将要的介绍有关 C右值引用 的相关知识。对于本期知识内容&#xff0c;大家是必须要能够掌握的&#xff0c;在面试中是属于重点考察对象。 目录 &#xff08;一&#xff09;左值引用和右值引用 1、什么是左值&#xff1f;什么是左值引用…

如何在不使用任何软件的情况下将 PDF 转换为 Excel

通常&#xff0c;您可能会遇到这样的情况&#xff1a;您需要的数据不在 Excel 工作表中&#xff0c;而是以数据表形式出现在 PDF 文件中。为了将此数据放入 Excel 工作表中&#xff0c;如果您尝试将数字复制并粘贴到电子表格中&#xff0c;则列/行将无法正确复制和对齐。因此&a…

C++信息学奥赛1145:字符串p型编码

#include <iostream> #include <string> using namespace std; int main() {string str;// 输入一个字符串cin>>str;int nstr.length();for(int i0;i<n;i){int a1;while(str[i]str[i1]){i;a;}cout<<a<<str[i]; // 输出连续相同字符的个数和该…

开源硬件:下一个技术革命?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

常见前端面试之VUE面试题汇总七

20. 对 vue 设计原则的理解 1.渐进式 JavaScript 框架&#xff1a;与其它大型框架不同的是&#xff0c;Vue 被设计 为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上 手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的…

COMPUTERS GEOSCIENCES投稿流程

COMPUTERS & GEOSCIENCES投稿流程 期刊介绍页面投稿网页投稿流程1.注册投稿账号2.注册orcid3.需要上传的文件4. 利益声明&#xff08;Declaration of Interest Statement&#xff09;5.Highlights6.爱思唯尔文章类别怎么选 COMPUTERS & GEOSCIENCES投稿流程 期刊介绍页…