STM32之串口的使用

发布者:chunli最新更新时间:2021-10-12 来源: eefocus关键字:STM32  串口  电平转换 手机看文章 扫描二维码
随时随地手机看文章

串口的使用



KEIL里继续软件仿真

仿真和下载时要注意的是,仿真要选USE Simulation  而下载要选右边的JTAG。。。。

然后点击debug 进入调试界面

 

view--->serial windos -->UART 1

全速运行 其结果如下:

串口发送数据就到此为止。


串口接收数据

这儿写的跟上面的已经没有关系了,不要搞混。

关于从PC机发送数据到STM32,这一部分则需要中断来实现,因为我们不需要时时刻刻都来检测外部是否发出数据给STM32,因此只要有数据来,就触发中断。这里就需要配置NVIC了

void NVIC_Config(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //优先组为2

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  //打开USART中断通道

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

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

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //中断通道使能

NVIC_Init(&NVIC_InitStructure);

 

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);    //串口接收中断使能

 

USART_Cmd(USART1, ENABLE);

}

 

其他配置比如串口复用到IO配置,串口时钟配置,和发送数据是一样的。


串口中断处理函数:


void USART1_IRQHandler(void)

{  int RX_status;  //自己定义一个标志位

RX_status = USART_GetFlagStatus(USART1, USART_FLAG_RXNE);//读取接收数据标志位,如果装好了一帧数据则硬件将其置一。

if(RX_status == SET) {

USART_SendData(USART1 , USART_ReceiveData(USART1));//将收到的数据再由STM32发送给PC机。

while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);//等待发送完成。

 

}

}


串口的发送接收大致如此,还是要搞懂什么数据位,硬件流,停止位,校验位什么,一个东西既然出现了就要好好分析出现的意义。想到了今天给电脑拆机清灰,电脑最好两年清一次。反正每次上螺丝都会多出那么一两个来,是不是可以不用要?


肯定不是,生产商肯定也知道节约成本什么,他们的结构工程师也知道PCB上开一个螺丝孔也是要收钱的。所以每一颗螺丝都有它的意义,所以什么校验位,停止位也有他的意义,即便我们不使用。其实剩的螺丝我也扔了,完全不知道上在哪儿!


差不多就到这里了,有问题或者需要STM32的学习资料,关注我的新浪微博@忙碌的小姚,私信我即可,


学习知识一定要主动,这是多么痛的领悟啊!!!


关键字:STM32  串口  电平转换 引用地址:STM32之串口的使用

上一篇:STM32_USART 串口通讯详解
下一篇:利用STM32 的串口来发送和接收数据实验

推荐阅读最新更新时间:2024-11-10 10:37

在RAM中调试STM32程序的配置方法
早就听说可以在RAM中调试STM32程序了,直到昨天晚上看了个视频,自己也想来试试。乘热打铁,今天上午跑到实验室,从网上下载资料,凭着零星的记忆开始配置。不过任何事情都不是一次成功的,这次也不意外。But经过反反复复修改,查资料,修改,查资料。还是成功啦!下面就把我配置的一些经验,结合网上已经有的一些资料傻瓜式总结出来,希望所有像我这样的初学者能够少走弯路。。。。。。 先说说在RAM中调试STM32程序的好处吧! 1. 可以单步调试程序,并且不用像仿真调试那样需要去查看繁琐的寄存器位,直接可以通过实验现象来Debug。 2. 避免擦写Flash次数限制,虽然Flash的烧写次数高达1000次以上,但是也经不起小白程序员
[单片机]
在RAM中调试<font color='red'>STM32</font>程序的配置方法
安全启动 - STM32安全启动架构
安全需要一个起点。 现在我们理解,没有安全启动,设备平台的安全难以得到保证。安全启动要求启动的位置一定是固定在某个地方。那么固定启动位置靠什么保证? 必须靠硬件 。软件本身的特点,决定了它很容易被修改,即使做了加密和加扰,破解的难度依然比硬件低很多。所以,安全启动一定是靠 STM32 硬件来保证。 脱离硬件谈安全启动基本上是不可能的 。 实现 Root of Trust(信任根)通用的做法是什么呢?一般是, 芯片有一个 Bootrom 启动只读存储区 。硬件的设计保证,芯片加电启动一定是从这个只读的甚至不可见的 Bootrom 里执行。 事实上,保持安全启动的原则不变,但是实现的方式可以不一样。 对于这个 Bootrom,
[单片机]
STM8L101F3P6串口查询发送
先说几句,一直都没有对STM8的串口应用进行总结,最近小结一下。STM8应用库来开发,在基本的串口的应用上,我自己的理解现在还很不到位。我本以为STM8的串口也会有查询发送、中断发送、查询接收、中断接收这样几种方法呢~!可事实上我现在对于中断发送这路模式还没太搞明白,与51单片机的串口工作还是有区别的。 STM8提供了发送中断和发送完中断,我自己的理解是,在发送时进入中断和发送一个字节完成时进行中断。这与我大脑中理解的串口中断还是不一样的,回头要继续把这里搞明白。 一般情况下,STM8的串口多数是用查询发送,中断接收,这样来做。使用串口前要如下几点: 1.配置TX和RX的GPIO管脚状态 2.初始化串口,这里要打开
[单片机]
STM32向量表-串口1中断
DCD指令:用于分配一片连续的字存储单元(32bit),并将表达式的值初始化给该字存储单元,类似于C中定义数组并初始化。比如: DCD 0 的意思是:分配一个字存储单元,并将该单元初始化为0。 EXPORT指令:伪指令,用于在程序中声明一个全局标号,该标号可以在其他文件中使用 一、STM32的启动文件分析 https://blog.csdn.net/weicao1990/article/details/46914013 1.STM32启动文件中可以看到如下代码 __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Ha
[单片机]
基于STM32编写一个SPI接口例程
引言 SPI是串行外设接口的缩写,是一种高速的,全双工,同步的通信总线。由于SPI高速和同步的特性,使其成为嵌入式系统和小型设备中使用最广泛的几种通信接口之一。本文将详细讲解一下SPI,并且最后基于STM32编写一个例程。 介绍 SPI简介 SPI(Serial Peripheral Interface)是一种串行外设接口,用于在微控制器(MCU)或数字信号处理器(DSP)等主设备与外部设备之间进行通信。SPI的设计旨在实现高速数据传输和简单的硬件实现。 SPI接口通常由一个主设备(Master)和一个或多个从设备(Slave)组成。主设备控制通信的时序和数据传输,而从设备根据主设备的指令进行响应。SPI通信基于全双工传输方式
[单片机]
基于<font color='red'>STM32</font>编写一个SPI接口例程
STM32中 一些类型的别名
typedef signed char int8_t; typedef signed short int int16_t; typedef signed int int32_t; typedef signed __INT64 int64_t; /* exact-width unsigned integer types */ typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef int uint32_t; typedef unsigned __INT64 uint64_t;
[单片机]
STM32 BIT_BAND 位段位带别名区使用入门
1. 什么是位段、位带别名区? 2. 它有什么好处? 答1: 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作, MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 ; 就是这样把P1口的第三个脚(BIT2)置0置。 而现在STM32的位段、位带别名区就为了实现这样的功能。 对象可以是SRAM,I/O外设空间。实现对这些地方的某一位的操作。 它是这样的。在寻址空间(32位地址是 4GB )另一地方,取个别名区空间,从这地址开始处,每一个字(32BIT) 就对应SRAM或I/O的一位。 这样呢,1MB SRAM就
[单片机]
<font color='red'>STM32</font> BIT_BAND 位段位带别名区使用入门
STM32 CAN 波特率的确定
先看两份资料: (1),STM32 得到500Kb/s的波特率 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=1; 每一位的Tq数目 = 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16 如果CAN时钟是 8 MHz : (8M / 1 ) / 16 = 500K 其中: 1 为分频系数 16 为每一位的Tq数目 为了设置为 100K,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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