前段时间某个项目需要多串口收发数据,因此尝试了一番,参考了正点原子官方例程,现在记录下
代码:
USART3.c中先添加头文件:

#include "sys.h"
#include "usart.h"
#include <stdarg.h>
#include "stdio.h"
#include "string.h"

并定义:

//串口接收缓存区
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];              //接收缓冲,最大USART3_MAX_RECV_LEN个字节.
u8  USART3_TX_BUF[USART3_MAX_SEND_LEN];             //发送缓冲,最大USART3_MAX_SEND_LEN字节

USART3初始化:

void usart3_init(u32 bound){//GPIO端口配置USART_InitTypeDef USART_InitStructure;    NVIC_InitTypeDef NVIC_InitStructure;     GPIO_InitTypeDef GPIO_InitStructure;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);    // USART3_Rx (PB.11)       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    GPIO_Init(GPIOB, &GPIO_InitStructure);    // USART3_Tx (PB.10)   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    GPIO_Init(GPIOB, &GPIO_InitStructure);//USART3 NVIC配置    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);    //USART3 初始化设置 USART_InitStructure.USART_BaudRate = bound;    USART_InitStructure.USART_WordLength = USART_WordLength_8b;    USART_InitStructure.USART_StopBits = USART_StopBits_1;    USART_InitStructure.USART_Parity = USART_Parity_No;    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //初始化 USART3     USART_Init(USART3, &USART_InitStructure);// 开启串口接收中断   USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);    // 使能USART3     USART_Cmd(USART3, ENABLE);
}

USART3 printf函数:

//串口3,printf 函数
//确保一次发送数据不超过USART3_MAX_SEND_LEN字节
void u3_printf(char* fmt,...)
{  u16 i,j; va_list ap; va_start(ap,fmt);vsprintf((char*)USART3_TX_BUF,fmt,ap);va_end(ap);i=strlen((const char*)USART3_TX_BUF);        //此次发送数据的长度for(j=0;j<i;j++)                           //循环发送数据{while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   USART_SendData(USART3,USART3_TX_BUF[j]); }
}

USART3 中断函数:

void USART3_IRQHandler(void)
{//your coding
}

USART3 头文件:

#ifndef __USART_H
#define __USART_H
#include "sys.h"
#define USART3_MAX_RECV_LEN     600                 //最大接收缓存字节数
#define USART3_MAX_SEND_LEN     600                 //最大发送缓存字节数
#define USART3_RX_EN            1                   //0,不接收;1,接收.extern u8  USART3_RX_BUF[USART3_MAX_RECV_LEN];         //接收缓冲,最大USART3_MAX_RECV_LEN字节
extern u8  USART3_TX_BUF[USART3_MAX_SEND_LEN];      //发送缓冲,最大USART3_MAX_SEND_LEN字节
extern vu16 USART3_RX_STA;                          //接收数据状态void usart3_init(u32 bound);                //串口3初始化
void u3_printf(char* fmt,...);
#endif

STM32笔记---USART3配置及收发数据相关推荐

  1. can总线配置读入是什么意思_STM32学习笔记—CAN总线收发数据常见问题分析

    CAN,Controller Area Network(控制器局域网络),在汽车电子.工业控制领域的应用比较多,通常用于局域组网. 这是第9篇学习分享文章,<STM32学习笔记>之CAN总 ...

  2. STM32学习笔记 | CAN总线收发数据常见问题分析

    关注+星标公众号,不错过精彩内容 CAN,Controller Area Network(控制器局域网络),在汽车电子.工业控制领域的应用比较多,通常用于局域组网. CAN总线和UART.I2C.SP ...

  3. dsp28335 sci中用fifo完成485收发通信_STM32学习笔记—CAN总线收发数据常见问题分析

    CAN,Controller Area Network(控制器局域网络),在汽车电子.工业控制领域的应用比较多,通常用于局域组网. 这是第9篇学习分享文章,<STM32学习笔记>之CAN总 ...

  4. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)

    [STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...

  5. 【STM32笔记】低功耗模式配置及避坑汇总

    [STM32笔记]低功耗模式配置及配置汇总 文章总结:(后续更新以相关文章为准) [STM32笔记]低功耗模式.WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断) [STM32 ...

  6. 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案)

    [STM32笔记]HAL库低功耗模式配置(ADC唤醒无法使用.低功耗模式无法烧录解决方案) [STM32笔记]低功耗模式配置及避坑汇总 一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需 ...

  7. STM32 HAL库串口收发数据

    STM32 HAL库串口收发数据 许多传感器的使用方法是:单片机给传感器发送一帧数据,然后传感器返回单片机一帧有用数据,所以串口的收发功能十分重要. STM32cubeMX的配置 时钟和下载方式就不讲 ...

  8. STM32学习之串口采用DMA收发数据:需要利用状态机加DMA加串口

    写在前面 在学习这一节知识点的时候,真的是感觉太抽象了,没有一个合适的视频讲的我有那种豁然开朗的感觉,直到我看到了这篇文章,大家可以去看看,里面的描述特别形象. 链接:https://blog.csd ...

  9. STM32f407与STM32F103 串口采用DMA收发数据配置方法的异同

    最近有个项目需要用到STM32F407ZET6这款芯片,其中有一个串口收发数据的应用.因为之前有用过STMF32F103ZET6通过DMA收发数据的方案,所以我打算移植之前的代码实现这个功能,STM3 ...

最新文章

  1. Window密码恢复的方法(转)
  2. #if DEBUG vs. Conditional(“DEBUG”)
  3. 【kerberos】kerberos 认证 详情介绍
  4. hdu-5673 Robot(默次金数)
  5. 一种特殊的多语言解决方案
  6. 天瑞地安科技集团:APP软件如何优化
  7. 麦肯锡:数字化转型四步法!
  8. dede采集-织梦全自动采集插件-织梦免费采集插件
  9. mysql查询条件为空时不作为条件_怎么实现当查询值为空时,不作为查询条件
  10. 日本被动元件是怎样称霸全球的
  11. C# GDI 手绘图片转化为电子版处理
  12. Python 进阶视频课 - 10. LSMC 美式百慕大期权定价
  13. 《数据结构》物联1131-1132同学链接
  14. 一套完整的软件开发流程是怎样的?
  15. python星星万花筒_少儿编程分享:码趣君教你用Python编写推星星游戏(完)
  16. 按时间检索中,开始时间为00:00:00,结束时间为23:59:59
  17. Html+Css+js实现春节倒计时效果
  18. 2.机器学习复习笔记-各种评估指标
  19. Redhat设置虚拟网卡
  20. 构建Django模型

热门文章

  1. [Python 高德地图] API调用学习历程(四)
  2. Feign 请求动态URL
  3. Pascal VOC2012数据集下载
  4. python读取nc文件数据生成专业气象图
  5. java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换
  6. Uipath Studio流程设计器介绍
  7. 【一】数字图像的常见概念
  8. 企业计算机管理系统数据流图,管理信息系统作业[数据流图].doc
  9. MySQL8源代码安装(CentOS8版本)
  10. oracle项目总结报告,“项目总结报告”如何写?5个方向16个关键要素:总结很全面...