【实验二】串口实验

发布者:chwwdch最新更新时间:2017-09-26 来源: eefocus关键字:串口实验  STM32 手机看文章 扫描二维码
随时随地手机看文章

一、实验目的


STM32 通过串口和上位机的对话,STM32 在收到上位机发过来的字符串后,原原本本的返回给上位机。 


二、STM32串口简介


STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、 支持调制解调器操作、 智能卡协议和 IrDA SIR

 ENDEC 规范、具有 DMA等。


我们这里使用的是USART1。

串口设置的步骤:

1) 串口时钟使能, GPIO 时钟使能
2) 串口复位
3) GPIO 端口模式设置
4) 串口参数初始化
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6) 使能串口
7) 编写中断处理函数

三、硬件设计


LED灯、串口1。



四、软件设计

usart.c文件

对串口和IO进行设置!


  1. void uart_init(u32 bound)  


  1. {  

  2.     GPIO_InitTypeDef GPIO_InitStructure;  

  3.     USART_InitTypeDef USART_InitStructure;  

  4.     NVIC_InitTypeDef NVIC_InitStructure;  

  5.        

  6.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能时钟  

  7.     USART_DeInit(USART1);  //串口复位  

  8.     //USART1_TX   PA.9 IO口设置  

  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;   

  10.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  11.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   

  12.     GPIO_Init(GPIOA, &GPIO_InitStructure);   

  13.      

  14.     //USART1_RX   PA.10  

  15.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  

  16.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  

  17.     GPIO_Init(GPIOA, &GPIO_InitStructure);    

  18.   

  19.     //Usart1 NVIC 初始化  

  20.     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  

  21.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;  

  22.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        

  23.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           

  24.     NVIC_Init(&NVIC_InitStructure);   

  25.     

  26.     //USART参数初始化  

  27.   

  28.     USART_InitStructure.USART_BaudRate = bound;;  

  29.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;  

  30.     USART_InitStructure.USART_StopBits = USART_StopBits_1;  

  31.     USART_InitStructure.USART_Parity = USART_Parity_No;  

  32.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  

  33.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  

  34.   

  35.     USART_Init(USART1, &USART_InitStructure);   

  36.     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断  

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

  38.   

  39. }  


在串口的接收方面,原子哥设计了一个接受协议,学习啦!就是自己定义一个全局变量,将这个变量看作是一个寄存器,是16位的,最高位当作接收完成的标识位,第14位当作接收到0x0D标识(回车的表示由两个字节组成0x0D 和 0x0A,当接收到这个两个字节时表示接收完成);第13位-第0位,表示接受到的数据数目。


具体的程序是:


  1. if((USART_RX_STA&0x8000)==0)//接收未完成  

  2.         {  

  3.             if(USART_RX_STA&0x4000)//接收到了0x0d  

  4.             {  

  5.                 if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始  

  6.                 else USART_RX_STA|=0x8000;  //接收完成了   

  7.             }  

  8.             else //还没收到0X0D  

  9.             {     

  10.                 if(Res==0x0d)USART_RX_STA|=0x4000;  

  11.                 else  

  12.                 {  

  13.                     USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;  

  14.                     USART_RX_STA++;  

  15.                     if(USART_RX_STA>(USART_REC_LEN-1))  

  16.                         USART_RX_STA=0;//接收数据错误,重新开始接收      

  17.                 }          

  18.             }  

  19.         }              



五、实验结果

成功!


关键字:串口实验  STM32 引用地址:【实验二】串口实验

上一篇:【实验三】外部中断实验
下一篇:【实验一】跑马灯实验

推荐阅读最新更新时间:2024-03-16 15:38

STM32---对GPIO电路结构的理解(输出电路)
前一段时间学习了STM32,先是用库函数学了一个星期。发现学完之后,一些基本要用的东西能配出来,但是过程却是十分的懵逼。于是决定暂时放弃库函数,用51的思维学习32,从寄存器开始,发现效果不错。一两天学一两个模块,个把星期下来对一些基本模块的常用寄存器也理解的不少。决定慢慢的回归库函数之前写下自己对STM32一些模块的理解,共勉之。 首先附上GPIO口的内部电路图: 其中蓝色方框部分代表的是GPIO的输入电路,红色方框的部分,代表GPIO的输出电路。 可见: 从写入端看输出部分的四种模式分别是:通用推挽输出、通用开漏输出、复用推挽输出、复用开漏输出。 接下来分析输出电路的四种输出形式(数据从“1”或“2”端到 I/O 端口。注
[单片机]
STM32-外部中断实验
这一节,我们将向大家介绍如何使用STM32的外部输入中断。通过第1、2节的学习,我们掌握了STM32的IO口最基本的操作。这节我们将介绍作为外部中断输入口,STM32的需要做哪些设置。本节分为如下几个部分: 3.4.1 STM32外部中断简介 3.4.2 硬件设计 3.4.3 软件设计 3.4.4 下载与测试 3.4.1 STM32外部中断简介 STM32的IO口在本章第一节有详细介绍,而外部中断在第二章也有详细的阐述。这里我们将介绍如何将这两者结合起来,实现外部中断输入。 STM32的每个IO口都可以作为中断输入,这点很好用。要把IO口作为外部中断输入,有以下几个步骤: 1)初始化IO口为输入。 这一步设置你要作为外部中断输入
[单片机]
基于HAL库的STM32呼吸灯实验
先决条件:装有编译和集成的开发环境,比如: Keil uVision5。 板子硬件要求:设计了 LED 在 定时器 的 接口 上 呼吸灯是一种常见的 电子制作 实验项目,其通过控制 LED 灯的亮度变化,实现了一种 模拟 人类呼吸的效果。 作为一种常见的数字调光技术,呼吸灯广泛应用于 工业控制 、 智能家居 等领域。 而在此过程中,使用 微控制器 如 STM32 ,则可以更加便捷、灵活地实现呼吸灯的控制。 因此,本文将介绍基于 STM32 的呼吸灯实验,通过代码编写、编译 下载 和调试运行,实现了一个简单的呼吸灯 控制系统 。 实验目的 本实验旨在通过 STM32 的呼吸灯实验,掌握 STM32 的 编程 方法和调试技巧,并深入理
[单片机]
基于HAL库的<font color='red'>STM32</font>呼吸灯实验
STM32入门-STM32时钟系统,时钟初始化配置函数
  在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main。那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使用库函数编写的LED程序,在system_stm32f10x.c文件中可以找到SystemInit()函数,SystemInit()代码如下:   void SystemInit (void)   {   /* Reset the RCC clock configuration to the default reset state(for debug purpose) /   / Set HSION bit /   RCC- CR
[单片机]
STM32的PWM的频率和占空比设定
在TEC控温项目中用到PWM的占空比来控制温度,这就需要占空比是连续可以变化的。 最开始也是到处找资料,找现成的例程,发现大家各说风云,最后还是没有建设性的结果。所以又请教了官方的固件库“STM32最新固件库v3.5”(存到百度网盘- 开发应用- stm32目录下了)呵呵,有现成的demo。开始好像是懂了也没有过多的去研究,也没有备份,就没去管他了。后来具体用的时候发现没有想象的那么简单,又倒腾了好久才搞清楚,问了不走弯路。这次决定用博客来记录一下现在的成果。配置文件如下: void TIME_ini(uint16_t Channel4Pulseset) { TIM_TimeBaseInitTypeDef TIM_Time
[单片机]
STM32 IAP APP 启动过程
最近因项目需求要实现STM32的在线升级即IAP功能,先将这几天的学习体会和IAP的具体实现总结出来,分享给大家,希望对同样实现IAP的童鞋有所帮助,文中最后会上传名为STM32_Update.zip的压缩文件里面包含了STM32_App、STM32_MyBoot_V1.0和升级软件STM32_UpdateSoftware的源码文件供大家参考。所有程序都经过测试,可以直接在原子哥的开发板上跑,上位机的升级软件大家可以直接打开 STM32_Update\STM32_UpdateSoftware\Release\STM32_UpdateSoftware.exe来升级,如果需要查看源码请用VS2010打开工程文件。 最终要实现的是:
[单片机]
<font color='red'>STM32</font> IAP APP 启动过程
STM32启动文件的选择及宏定义
startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的STM32F100xx startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_ld_vl.s 小容量的STM32F100xx startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32
[单片机]
142条STM32遇到的坑,你知道几个?
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2 1,意思是APB2接高速设备。 2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用 3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz 4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed InternalR
[单片机]
142条<font color='red'>STM32</font>遇到的坑,你知道几个?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved