1.printf函数重定向

①以stm32f103rct6的usart1为例,打开cube,配置好RCC和USART1,生成mdk程序。

②打开工程,在main.c中

/* USER CODE BEGIN Includes */下面添加

#include“stdio.h”

/* USER CODE BEGIN PV */下面添加

int fputc(int ch, FILE *f)
{
   USART1->DR=(uint8_t)ch;
   while((USART1->SR&0X40)==0);//等待发送结束
   return ch;
}
int GetKey(void)
{
   while (!(USART1->SR & 0x20));
   return ((int)(USART1->DR & 0x1FF));
}

至此,可以使用printf函数通过USART1打印数据。配置其他串口如USART2并将fputc和GetKey函数中的USART1改为USART2,即可用printf函数通过USART2打印数据了。

2.用stm32cube配置好串口后生成mdk程序,发送可以直接使用HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)这个函数。一般Size就写1,timeout也小点,10-50吧。

接收稍微麻烦点,①在初始化时,用HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)手动打开串口接收中断。

②修改串口接收中断的回调函数,对接收的数据进行处理。

例如:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    RxBuff[Rx_Count++]=RxByte;
    if(RxByte==0x0A)
    {
       HAL_UART_Transmit(&huart1,RxBuff,Rx_Count,10);
       Rx_Count=0;
    }
    if(Rx_Count>=254)
    {
      Rx_Count=0;
    }
   HAL_UART_Receive_IT(&huart1,&RxByte,1);      //因为根据初始化时HAL_UART_Receive_IT(&huart1,&RxByte,1);意思是接收一个字节就要关中断,接收内容放在RxByte中。所以在中断回调函数中我们又要重新打开1字节中断。这样形成循环。
}

串口中断回调函数名就是HAL_UART_RxCpltCallback是不能改的,函数内容可改。这样简单的接收处理对发送的数据有要求就是,发送数据最后一个字节必须是0x0a,所以有其局限性,以后加上串口超时功能就可以了。

别忘了设置全局变量

uint8_t TxBuff[]="hello world!";
uint8_t RxBuff[255];
uint16_t Rx_Count;
uint8_t RxByte;

stm32cube--串口的更多相关文章

  1. STM32Cube IDE配置串口发送与接收

    此项目源码下载地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart 串口与中断配置如下 在生成的main函数中,添加开启串口接收中断 HAL_I ...

  2. 基于STM32Cube的IIC主从通信

    1.建立STM32Cube工程,我使用的芯片是STM32F429,为了更简单的建立单独的IIC通信任务,我使用了FREERTOS,另外选择了RCC(系统时钟初始化),I2C1,I2C2(为了验证代码的 ...

  3. 基于STM32Cube的ADC模数采样设计

    1.背景         此实验建立在STM32F429核心板基础上,对于深刻了解STM32Cube使用具有深刻意义.利用DMA进行ADC采样,具有速度快,极大减少CPU消耗的优势,对于数据采集系统具 ...

  4. STM32单片机串口中断+DMA使用(含CUBE配置)

    最近又要重新用32做点东西,发现一两年没怎么碰的结果就是,曾经熟得不行的东西都变得极度陌生,这种重新学习记忆的过程过于痛苦,果然还是要留下一些记录给之后失忆的自己的. 1.STM32CUBE配置 1. ...

  5. STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率

    前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...

  6. .NET 串口通信

    这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...

  7. 基于STM32Cube的脉冲输出

    方法一:定时器定时I/O反转生成脉冲波形 1.建立STM32Cube选择STM32F429,我使用的STM32F429-discovery开发板,晶振是8MHz,时钟配置为180M,这样定时器内部时钟 ...

  8. [连载]《C#通讯(串口和网络)框架的设计与实现》- 0.前言

                                  目       录 前言 前言 刚参加工作,使用过VB.VC开发软件,随着C#的崛起,听说是C++++,公司决定以后开发软件使用C#,凭借在 ...

  9. 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  10. [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用

    目       录 第十二章     二次开发及应用... 2 12.1        项目配制... 3 12.2        引用相关组件... 4 12.3        构建主程序... 5 ...

随机推荐

  1. 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出).Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQ ...

  2. LightOj 1289 - LCM from 1 to n(LCM + 素数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1289 题意:求LCM(1, 2, 3, ... , n)%(1<<32), ...

  3. html5新增语义标签

    1.header <header> 标签定义文档的页眉(介绍信息). 2.nav <nav> 标签定义导航链接的部分. 3.article <article> 标签 ...

  4. Java Servlet(四):Servlet接口service工作(ServletRequest,ServletResponse对象)(jdk7+tomcat7+eclipse)

    本篇将会记录,Servlet接收客户端传递来的参数信息,并返回信息使用的对象,及这些对象的函数相关用法. 还是在java ee工程中进行操作,在WebContent目录下创建一个login.jsp文件 ...

  5. mac上mysql乱码问题解决

    一.mysql出现乱码问题: 出现的问题是下图这样的乱码问题,我是使用java在做练习的时候发现出现字符集编码问题的: 当时是使用jdbc来添加的数据,我的jdbc包括web前端后端的编码都是设置的是 ...

  6. Unity 对象查找

    GameObject.Find() 对象名 可查找带不带脚本,不能查隐藏,有可能不是要找的对象 GameObject.Find() 目录结构 可查找带不带脚本,能查隐藏,能确定是要找的对象 trans ...

  7. css3 flex

    <!DOCTYPE html> <html> <head> <style> .first-face { display: flex; justify-c ...

  8. nodejs框架express准备登录

    目录: 安装模板 静态资源 添加视图 渲染视图 url重定向 模板引擎 从本节课程开始我们要使用express框架实现一个简单的用户登陆功能,让我们先准备一下相关资源. 在nodejs中使用expre ...

  9. [转]SOCKET通信中TCP、UDP数据包大小的确定

    TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...

  10. EntityFramework Core 学习笔记 —— 创建模型

    原文地址:https://docs.efproject.net/en/latest/modeling/index.html 前言: EntityFramework 使用一系列的约定来从我们的实体类细节 ...