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. js Memoization 优化运行速度

    项目中需要用到 大计算量 耗时的js运算. Memoize 是一个优化方法 ,对耗时的递归运算,漫长的查找运算的结果进行缓存,使运行时间最小化 原理是缓存先前的结果计算值从而可以避免需要重新计算   ...

  2. Velocity(4)——大小写

    Velocity是大小写敏感的.但是为了减少使用者的错误,某些地方存在特殊情况. 比如$foo.bar,首先会被检查是否能匹 配$foo.getbar(),再被检查是否能匹配$foo.getBar() ...

  3. Android APK反编译详解(附图)

    转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...

  4. BAT脚本打印空行的使用方法

    @echo off echo= echo, echo; echo+ echo/ echo[ echo] echo: echo. echo\ pause 这十种方法可以分为三组,每组的效率依次递减. 至 ...

  5. 新建Java文件的 文档注释

    /** * <br> * ============================================= * * @author : Liuyc * @company : 版权 ...

  6. cmd运行sql server安装

    cmd运行sql server安装 SQL2012非群集安装_更新到最新版本.bat setup.exe /UpdateSource=.\hotfix\Latest /ACTION="Ins ...

  7. 通过setDB2Client*来方便的使用TRACE调优jdbc程序

    一般来说通过TRACE的report来分析DDF的性能问题的话,基本对DBA都是噩梦一样.因为所有的Thread都是通过DDF一个类型的Thread,所以不管你怎么分类,看Accounting rep ...

  8. delphi的webBrowser操作HTML研究

    测试例子: 外网电脑D:\TEST\delphiTest\webbrowsetest 参考文档: delphi 操作WebBrowser 元素值 http://hi.baidu.com/kinglik ...

  9. Excel 统计在某个区间内数值的个数

    =COUNTIF(A1:A50,"<=1.0E-5")-COUNTIF(A1:A50,"<60")

  10. 记录对依赖注入的小小理解和autofac的简单封装

    首先,我不是一个开发者,只是业余学习者.其次我的文化水平很低,写这个主要是记录一下当前对于这块的理解,因为对于一个低水平 的业余学习者来说,忘记是很平常的事,因为接触.应用的少,现在理解,可能过段时间 ...