Stm32旧版库函数11——串口发送数据 使用中断接收

news2024/11/25 5:28:47

#include "stm32f10x_lib.h"
#include "usart.h"
#include "delay.h"

/*
********************************************************************************
** 函数名称 : USART1_Configuration(void)
** 函数功能 : 串口1初始化
** 输    入    : 无
** 输    出    : 无
** 返    回    : 无
********************************************************************************
*/
void USART1_Configuration(void)
{

USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef  USART_ClockInitStructure;

NVIC_usart1();
GPIO_usart1();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 |RCC_APB2Periph_USART1, ENABLE  );

USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;            // 时钟低电平活动
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;                // 时钟低电平
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;                // 时钟第二个边沿进行数据捕获
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;        // 最后一位数据的时钟脉冲不从SCLK输出
/* Configure the USART1 synchronous paramters */
USART_ClockInit(USART1, &USART_ClockInitStructure);                    // 时钟参数初始化设置
                                                                    
USART_InitStructure.USART_BaudRate =19200;                          // 波特率为:19200
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;          // 发送使能+接收使能
/* Configure USART1 basic and asynchronous paramters */
USART_Init(USART1, &USART_InitStructure);
    
  /* Enable USART1 */
USART_ClearFlag(USART1, USART_IT_RXNE);             //清中断,以免一启用中断后立即产生中断
USART_ITConfig(USART1,USART_IT_RXNE, ENABLE);        //使能USART1中断源
USART_Cmd(USART1, ENABLE);                            //USART1总开关:开启

 /* 如下语句解决第1个字节无法正确发送出去的问题 */
USART_ClearFlag(USART1, USART_FLAG_TC);     // 清标志

}

void NVIC_usart1(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
 
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 
  NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;       //中断响应优先级1
  NVIC_Init(&NVIC_InitStructure);

  /* Enable the USART1 Interrupt */
   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;       //通道设置为串口1中断
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;       //中断响应优先级1
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           //打开中断
   NVIC_Init(&NVIC_InitStructure);                            //初始化

}
void GPIO_usart1(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE  );
   /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                 //    选中管脚9
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         // 复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         // 最高输出速率50MHz
  GPIO_Init(GPIOA, &GPIO_InitStructure);                 // 选择A端口
    
  /* Configure USART1 Rx (PA.10) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;              //选中管脚10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;      //浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);                  //选择A端口

}
 //************************************************
void  USART1_SendData(unsigned char SendData)
{
USART_SendData(USART1, SendData);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //Tansmit Data Register empty interrupt
}


void Show_short(short k)    //显示两个有符号字节      shourt2字节数据
{
  unsigned char a,b,c,d,e;
  if(k<0)
  {
    k=-k;
    USART1_SendData('-');
  }
  else
    USART1_SendData('+');
  e=k%10+0x30;
  d=(unsigned char)(( k/10 )%10)+0x30;
  c=(unsigned char)(( k/100 )%10)+0x30;
  b=(unsigned char)(( k/1000 )%10)+0x30;
  a=k/10000+0x30;
  USART1_SendData(a);
  USART1_SendData(b);
  USART1_SendData(c);
  USART1_SendData(d);
  USART1_SendData(e);
  USART1_SendData(' ');
}
void Show_double(double kk)    //double为4字节与float一样 在这里只显示5位整数部分和3位小数部分
{
 unsigned char a,b,c,d,e,f,g,h;
  u32 k;
  if(kk<0)
  {
    kk=-kk;
    USART1_SendData('-');
  }
  else
    USART1_SendData('+');
  k=kk;
  e=k%10+0x30;
  d=(unsigned char)(( k/10 )%10)+0x30;
  c=(unsigned char)(( k/100 )%10)+0x30;
  b=(unsigned char)(( k/1000 )%10)+0x30;
  a=(unsigned char)(( k/10000 )%10)+0x30;
  k=kk*10;
  f=(unsigned char)(k%10)+0x30;
  k=kk*100;
  h=(unsigned char)(k%10)+0x30;
  k=kk*1000;
  g=(unsigned char)(k%10)+0x30;
  USART1_SendData(a);
  USART1_SendData(b);
  USART1_SendData(c);
  USART1_SendData(d);
  USART1_SendData(e);
  USART1_SendData('.');
  USART1_SendData(f);
  USART1_SendData(h);
  USART1_SendData(g);
  USART1_SendData(' ');
}
void Show_u16(u16 k)    //显示两个无符号字节
{
  unsigned char a,b,c,d,e;
  e=k%10+0x30;
  d=(unsigned char)(( k/10 )%10)+0x30;
  c=(unsigned char)(( k/100 )%10)+0x30;
  b=(unsigned char)(( k/1000 )%10)+0x30;
  a=k/10000+0x30;
  USART1_SendData(a);
  USART1_SendData(b);
  USART1_SendData(c);
  USART1_SendData(d);
  USART1_SendData(e);
  USART1_SendData(' ');
}
void Show_u32(u32 k)    //显示无符号long的数据,4字节 0~4294967295
{
  unsigned char a,b,c,d,e,f,g,h,i,j;
  j=k%10+0x30;
  k=k/10;
  i=k%10+0x30;
  k=k/10;
  h=k%10+0x30;
  k=k/10;
  g=k%10+0x30;
  k=k/10;
  f=k%10+0x30;
  k=k/10;
  e=k%10+0x30;
  k=k/10;
  d=k%10+0x30;
  k=k/10;
  c=k%10+0x30;
  k=k/10;
  b=k%10+0x30;
  k=k/10;
  a=k%10+0x30;
  USART1_SendData(' ');
  USART1_SendData(a);
  USART1_SendData(b);
  USART1_SendData(c);
  USART1_SendData(d);
  USART1_SendData(e);
  USART1_SendData(f);
  USART1_SendData(g);
  USART1_SendData(h);
  USART1_SendData(i);
  USART1_SendData(j);
  USART1_SendData(' ');
}
void Showstring(unsigned char *p)
{
   unsigned char *k;
   k=p;
   while(*p!='\0')        //'\0'的ascii值为0
   {
     USART1_SendData(*p);
     p++;
   }
   p=k;
   //USART1_SendData(' ');
   //USART1_SendData(0X0D);     //换行
   //USART1_SendData(0X0A);     //回车
}
 /*******************************************************************/
/*                                                                 */
/* STM32在串口1接收1字节                                           */
/* 说明:串口1接收中断                                             */
/*                                                                 */
/*******************************************************************/
//在中断服务程序中,由于主机响应中断时并不知道是哪个中断源发出中断请求,
// 因此必须在中断服务程序中对中断源进行判别,然后分别进行处理。
//当然,如果只涉及到一个中断请求,是不用做上述判别的。
//但是无论什么情况,做上述判别是个好习惯
void USART1_IRQHandler(void)        
{
  u8 dat;
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    //若接收数据寄存器满
  {     
    dat = (u8)(USART_ReceiveData(USART1)&0xff);   //第2个字节才是接受到的数据
    dat=dat;                                                                                                                    
  }
}

 

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

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

相关文章

城市消费券之地理位置攻防

近期&#xff0c;顶象发布了《城市消费券安全调研报告》&#xff08;以下简称《调研报告》&#xff09;。《调研报告》从城市消费券的发放规模、核销情况、风险出发&#xff0c;进一步分析除了黑灰产的作弊手段以及作弊工具。 其就作弊手段而言&#xff0c;黑灰产哄抢城市消费…

软件工程毕业设计题目100例

文章目录0 简介1 如何选题2 最新软件工程毕设选题3 最后0 简介 学长搜集分享最新的软件工程业专业毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准&#xff1a; 相对容易工作量达标题目新颖 1 如何选题 最近非常多的学…

3个条件,筛选出最趁手的财务分析工具

市面上的财务分析工具很多&#xff0c;但究竟哪一种更好用&#xff0c;更趁手&#xff1f;这就需要看哪个财务分析工具可做到以下3大要求。 1&#xff1a;是否能快速计算财务分析指标 在财务分析中&#xff0c;存在一个需要在行与行之间进行计算分析需求&#xff0c;比如在利…

[附源码]Python计算机毕业设计高校教室申请管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

网络原理 一

网络原理 本文主要是介绍TCP/IP协议这里面的核心内容,还是很重要的 TCP/IP协议的层级 应用层 传输的数据如何去使用 传输层 起点和终点的传输 网络层 中间传输过程中的路径规划 数据链路层 相邻节点的传输 物理层 这是最底层的,相当于基础设施 应用层 不同的应用程序,涉及到…

「Electron|快速开始」来写个Hello World吧

本文主要介绍如何快速使用Electron生成一个Hello World应用 文章目录主要步骤一、准备工作创建项目安装electron二、编写electron应用所需的基本内容首先&#xff0c;我们需要给electron应用一个入口创建窗口往窗口里面放一个HTML界面&#xff0c;写上"Hello World!"…

修改ik分词器源码实现直连数据库动态增量更新词汇

谈到es的中文分词器,肯定少不了ik分词器.现ik分词器有两种获取主词汇和停用词的方法: 一是通过ik\config目录下的main.dic和stopword.dic获取,但是每次修改后要重启才能生效 二是通过提供接口返回所有词汇的接口,接口路径配置在.但是该方式每次都需要将所有词汇返回,效率不高.…

大数据课设

----------------------------------------------------------------------------------------------------------------------------- 由于本人主修嵌入式方向最多使用的就是C语言&#xff0c;由于物联网这个专业的特殊性&#xff0c;javaweb没少 写&#xff0c;所以java也用…

Nginx动静分离

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;Linux专栏 &#x1f525;欢迎大佬指正&#xff0c;一起学习&#xff01;一起加油&#xff01; 目录&…

[附源码]Python计算机毕业设计SSM基于Java的租房系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

论文笔记:CycleMorph: Cycle Consistent UnsupervisedDeformable Image Registration

CycleMorph: Cycle Consistent Unsupervised Deformable Image Registration 针对本篇论文个人总结&#xff1a; 文章最重要的点在于施加循环一致性&#xff0c;模型有两个网络&#xff0c;移动图像与固定图像互相配准过程中施加约束优化网络提高配准精度&#xff0c;仔细看图…

如何求解欧拉路径?

求解欧拉路径前言一、案例二、回溯三、源码四、复杂度分析五、欧拉科普总结参考文献前言 欧拉路径 从图的一个节点出发&#xff0c;每条边只访问一次&#xff0c;遍历完了所有图节点&#xff0c;这条路径为欧拉路径。 一、案例 二、回溯 按照上面的例子&#xff0c;很容易理…

【LeetCode】1945. 字符串转化后的各位数字之和

题目描述 给你一个由小写字母组成的字符串 s &#xff0c;以及一个整数 k 。 首先&#xff0c;用字母在字母表中的位置替换该字母&#xff0c;将 s 转化 为一个整数&#xff08;也就是&#xff0c;‘a’ 用 1 替换&#xff0c;‘b’ 用 2 替换&#xff0c;… ‘z’ 用 26 替换&…

计算机网络原理第1章 概述

1.1 计算机网络在信息时代中的作用 1.2 互联网概述 1.2.1 网络的网络 互联网 特指Internet&#xff0c;起源于美国&#xff0c;现已发展成为世界上最大的、覆盖全球的计算机网络。 计算机网络 (简称为网络) 由若干结点(node)和连接这些结点的链路(link)组…

玩转MySQL:一站式解决分库分表后患问题方案

引言 上篇有关分分库分表一文中已经将分库分表的方法论全面阐述清楚了&#xff0c;总体看下来用一个字形容&#xff0c;那就是爽&#xff01;&#xff08;手动狗头&#xff09;尤其是分库分表技术能够让数据存储层真正成为三高架构&#xff0c;但前面爽是爽了&#xff0c;接着…

面试官:你觉得HTTPS能防止重放攻击吗?

引言 先来一段面试情景再现~~ ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 最后的结局自然就是 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; OK&#xff0c;带着上面的疑问&#xf…

【SpringCloud负载均衡】【源码+图解】【四】负载均衡的实现

【SpringCloud负载均衡】【源码图解】【三】LoadBalancer的工作原理 目录4. 负载均衡4.1 提供者DiscoveryClient4.1.1 CompositeDiscoveryClient4.1.2 EurekaDiscoveryClient4.1.3 SimpleDiscoveryClient4.1.4 自定义DiscoveryClient4.2 过滤器Supplier4.2.1 CachingServiceIns…

Linux文本三剑客之grep命令

Linux文本三剑客之grep命令 1. grep 命令 介绍 grep 命令的基本语法格式和参数列表&#xff01; 文本搜索工具&#xff0c;根据用户指定的”模式”对目标文本逐行进行匹配检查&#xff0c;打印匹配到的行。 模式&#xff1a;由正则表达式字符及文本字符所编写的过滤条件&am…

MySQL 中截取字符串的方法

LEFT(str, len) 从左边开始截取&#xff0c;如果字符串为 null 则返回null。 str&#xff1a;被截取字符串&#xff1b;len&#xff1a;截取长度 SELECT LEFT(ABCDEFT, 2) FROM sub_str;RIGHT(str, len) 从右边开始截取&#xff0c;如果字符串为 null 则返回null。 str&…

0125 搜索与回溯算法 Day14

剑指 Offer 12. 矩阵中的路径 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻…