0目标

1 STM32 串口简介

2 硬件设计

3 软件设计

4 下载验证

0.目标
利用串口 
1.STM32 串口简介
串口设置的一般步骤可以总结为如下几个步骤:
1) 串口时钟使能, GPIO 时钟使能
2) 串口复位
3) GPIO 端口模式设置
4) 串口参数初始化
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6) 使能串口
7) 编写中断处理函数 
注:对于复用功能的 IO,我们首先要使能 GPIO 时钟,然后使能复用功能时钟,同时要把 GPIO 模式设置为复用功能对应的模式。
查看手册《STM32 中文参考手册 V10》P110 的表格“8.1.11 外设的 GPIO 配置:

2 硬件设计

(1)LED0接PA0
(2)串口1
3.软件设计
新建工程:
其中SYSTEM下放置原子哥提供的三个文件夹delay、sys、uart(及其文件),HARDWARE下建LED文件夹,及其内建LED.C与LED.H文件。
uart中串口函数:
[html] view plaincopy
  1. <span style="font-size:18px;"></span>
[csharp] view plaincopy
  1. void uart_init(u32 bound){
  2. //GPIO端口设置
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. USART_InitTypeDef USART_InitStructure;
  5. NVIC_InitTypeDef NVIC_InitStructure;
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
  7. //USART1_TX   PA.9
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  9. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  11. GPIO_Init(GPIOA, &GPIO_InitStructure);
  12. //USART1_RX   PA.10
  13. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  14. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  15. GPIO_Init(GPIOA, &GPIO_InitStructure);
  16. //Usart1 NVIC 配置
  17. NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  18. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
  19. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;      //子优先级3
  20. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能
  21. NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
  22. //USART 初始化设置
  23. USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
  24. USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
  25. USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  26. USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
  27. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  28. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
  29. USART_Init(USART1, &USART_InitStructure); //初始化串口
  30. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断
  31. USART_Cmd(USART1, ENABLE);                    //使能串口
  32. }

LED.c内容:

[csharp] view plaincopy
  1. <span style="font-size:18px;">#include "led.h"
  2. //初始化PA0为输出口.并使能这个口的时钟
  3. //LED IO初始化
  4. void LED_Init(void)
  5. {
  6. GPIO_InitTypeDef  GPIO_InitStructure;
  7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //使能PA端口时钟
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;               //LED0-->PA0 端口配置
  9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //IO口速度为50MHz
  11. GPIO_Init(GPIOA, &GPIO_InitStructure);                  //根据设定参数初始化GPIOA0
  12. GPIO_SetBits(GPIOA,GPIO_Pin_0);                         //PA0 输出高
  13. }
  14. </span>

led.h:

[csharp] view plaincopy
  1. <span style="font-size:18px;">#ifndef __LED_H
  2. #define __LED_H
  3. #include "sys.h"
  4. #define LED0 PAout(0)// PA0
  5. void LED_Init(void);//初始化
  6. #endif</span>

主函数:

[csharp] view plaincopy
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. int main(void)
  6. {
  7. u8 t;
  8. u8 len;
  9. u16 times=0;
  10. delay_init();            //延时函数初始化
  11. NVIC_Configuration();    //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  12. uart_init(9600);     //串口初始化为9600
  13. LED_Init();              //LED端口初始化
  14. while(1)
  15. {
  16. if(USART_RX_STA&0x8000)
  17. {
  18. len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
  19. printf("\r\n您发送的消息为:\r\n\r\n");
  20. for(t=0;t<len;t++)
  21. {
  22. USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
  23. while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
  24. }
  25. printf("\r\n\r\n");//插入换行
  26. USART_RX_STA=0;
  27. }else
  28. {
  29. times++;
  30. if(times%5000==0)
  31. {
  32. printf("\r\n口袋里的超超 串口实验\r\n");
  33. printf("真JB帅\r\n\r\n");
  34. }
  35. if(times%200==0)printf("请输入数据,以回车键结束\n");
  36. if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
  37. delay_ms(10);
  38. }
  39. }
  40. }

4 下载验证

利用STM32 的串口来发送和接收数据实验相关推荐

  1. 串口通信——发送和接收数据(8位和16位数据之间的转换)

    1. 实验目的 1.发送两个字节数据,就是16位的数据,每一次发送8位,发送两次,这里要进行数据的拆分,如发送一个0XFF56,接收得到的也是FF56(16进制显示); 2.接收两个字节的数据(这里通 ...

  2. C#与松下PLC串口通讯发送,接收数据

    记录与学习 第一次跟PLC打交道,C#与松下plc交互读写功能,很多东西都是自己在网上找的,整理了下做个记录  引入"Panasonic.dll"文件 下载地址 百度盘百度网盘 请 ...

  3. STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷

    STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷 http://www.openedv.com/thread-63849-1-1.html 实现思路:采 用STM32F103的串口1,并配 ...

  4. 串口接收标志位语句_如何获取串口的发送和接收的标志位?

    我用C#写了一个小的串口调试软件,并在51的板子上调试成功了,但是换到STM32F103上不行了,由于刚学STM32,还很不熟悉,所以还请各位能否告诉我如何获取串口的发送和接收的标志位.或是帮我把下面 ...

  5. 【HAL库】STM32F407ZGT6实现串口中断发送和接收

    ** [HAL库]STM32F407ZGT6实现串口中断发送和接收 (保姆级教写代码1) ** 前言 根据近期所做的项目,想给大家分享一些有关STM32的各类通信方式的代码教程,都是基于STM32HA ...

  6. cubemx串口的发送与接收_串口收发模块设计

    串口收发模块设计 作者:巩文宏 公众号:数字积木 该串口收发模块有串口发送模块,串口接收模块,波特率生成模块,发送数据fifo模块,接收数据的fifo模块组成. 默认配置下,要求输入的参考时钟为50M ...

  7. hal 双串口同时接收丢失数据_【STM32Cube_06】使用USART发送和接收数据(查询模式)...

    寻求更简洁舒适的阅读体验,请移步Mculover666的个人博客: [STM32Cube_06]使用USART发送和接收数据(查询模式)​www.mculover666.cn 本篇文章主要介绍如何使用 ...

  8. STM32L152RE实现串口发送及接收数据

    本文主要讲解用keil软件实现USART串口发送及接收数据,默认读者keil环境已经配好,且头文件已正确引入,如出现编译错误以及st-link下载问题,请自行百度解决. 串口发送和接收数据是一件看起来 ...

  9. 51单片机串口通信发送以及接收代码详解1

    #include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...

最新文章

  1. 看看人家 SpringBoot 的全局异常处理,多么优雅...
  2. 新版本springboot-整合多数据源拆分思路
  3. eclipse常用以及实用的快捷键
  4. java 短链接实现方案_java利用百度短网址api实现URL长短互换工具类分享
  5. 网络——获取Web数
  6. Android集成JPush(极光推送)
  7. 利用salt防范MD5字典攻击
  8. E-prime问题(安装.net3.5)
  9. Winrunner经验总结
  10. 成都以前的计算机学校图片,成都计算机中职图片介绍
  11. 中国石油大学计算机第二阶段在线作业,中国石油大学计算机应用基础第二阶段在线作业答案2018年...
  12. Android PackageManagerService(三)pm命令安装流程详解
  13. 解析Hl7消息,将消息可视化
  14. 前沿 | 社区问答系统及相关技术
  15. web项目034-----JS模版引擎
  16. 北京2008年奥运会体育图标
  17. java登录界面代码
  18. HDU 5473(There was a kingdom-凸包+dp)
  19. User Interface Process(UIP) Application Block 2.0 研究总结
  20. Win7开启wifi热点

热门文章

  1. 使用SQLite学习SQL
  2. Window CMD快捷键
  3. CCBPM高级开发之类设计与数据库设计命名规则
  4. C#学习笔记之线程 - 同步上下文
  5. 强转类型,flash声音,父与子的交互
  6. C#中父子窗口之间实现控件互操作
  7. 课程名称翻译大全(zz)
  8. pl/sql函数学习
  9. 汇编--条件跳转指令
  10. 暑假第六周总结(2018.8.13-8.19)