06_STM32Cubeide开发_串口通讯

一、STM32串口硬件接收与发送框图

在这里插入图片描述

0.补充

  • 串口是以ascii码字符(8位二进制数据)来通讯的
  • 串口的物理线 数据是一位一位传输的

1.串口发送

  1. 数据写入发送数据寄存器TDR
  2. 数据从发送数据寄存器TDR逐步转入发送移位寄存器 ()
    -------前:TXE=0-----------数据全部转入发送移位寄存器 --------后:TXE=1--------------
  3. 发送移位寄存器将每一帧数据逐步发送到引脚上
    -------前:TC=0-----------最后一帧数据发送完 --------后:TC=1--------------
  4. 串口发送完成中断按照设置是否执行

2.串口接收

  1. 数据从引脚到接收移位寄存器
  2. 数据从接收移位寄存器接收数据寄存器RDR
    -------前:RXNE=0-----------数据全部转入接收数据寄存器RDR --------后:RXNE=1--------------
  3. 数据可以被读取,也可以产生接收中断

二、printf串口重定义(串口发送)

1.将syscall.c文件在工程编译中排除

(因为此文件和我们即将要添加的文件相冲突)
在这里插入图片描述
在这里插入图片描述

2.添加两个文件到工程中

  • 添加retarget.h文件到Core >> Inc中
  • 添加retarget.c文件到Core >> Src中

在这里插入图片描述

/*
 * retarget.c
 *
 *  Created on: 2021年10月20日
 *      Author: Administrator
 */

#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/times.h>
#include <limits.h>
#include <signal.h>
#include <../Inc/retarget.h>
#include <stdint.h>
#include <stdio.h>
#if !defined(OS_USE_SEMIHOSTING)
#define STDIN_FILENO  0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2

UART_HandleTypeDef *gHuart;

void RetargetInit(UART_HandleTypeDef *huart)  {
   
  gHuart = huart;
  /* Disable I/O buffering for STDOUT  stream, so that
   * chars are sent out as soon as they are  printed. */
  setvbuf(stdout, NULL, _IONBF, 0);
}
int _isatty(int fd) {
   
  if (fd >= STDIN_FILENO && fd <=  STDERR_FILENO)
    return 1;
  errno = EBADF;
  return 0;
}
int _write(int fd, char* ptr, 
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值