1、分析电路图

UART4_RX------>PB2

UART4_TX------>PG11

2、RCC章节分析

使能GPIOB和GPIOG控制器

RCC_MP_AHB4ENSETR[1] = 1------->使能GPIOB这一组控制器

RCC_MP_AHB4ENSETR[6] = 1------->使能GPIOG这一组控制器

3、GPIO章节分析

3.1分析GPIOx_MODER寄存器:设置PB2和PG11引脚为复用功能

GPIOB_MODER[5:4] = 10 ------->设置PB2引脚为复用功能

GPIOG_MODER[23:22] = 10 ------->设置PG11引脚为复用功能

3.2分析GPIOx_MODER寄存器:

GPIOB_AFRL[11:8] = 1000 ------->设置PB2引脚为复用功能UART4_Rx

GPIOG_AFRH[15:12] = 0110 ------->设置PG11引脚为复用功能UART4_Tx

4、UART章节

4.1分析USART_CR1寄存器

USART_CR1[28][12] = 00 ------->设置串口8位数据位

USART_CR1[15] = 0 ------->设置串口16倍采样率,会影响波特率的计算

USART_CR1[10] = 0------->设置串口无奇偶校验位

USART_CR1[3] = 1------->设置串口发送寄存器使能

USART_CR1[2] = 1------->设置串口接收寄存器使能

USART_CR1[0] = 1------->设置串口接收使能

4.2分析USART_CR2寄存器

设置串口1位停止位

4.3分析USART_BRR寄存器

设置串口波特率为115200bps,系统提供的串口时钟源:64MHZ

BRR = 64MHZ / 115200 = 0x22b

USART4_BRR = 0x22b ------->设置串口波特率为115200

4.4分析USART_RDR寄存器:接收数据存放在接收数据寄存器中

4.5分析USART_TDR寄存器:发送数据存放在发送数据寄存器中

4.6分析USART_PRESC寄存器:设置串口不分频

4.7分析USART_ISR寄存器:

USART_ISR[6]:判断一帧数据是否发送完成,这位只可以读

特点:如果发送数据完成之后,才可以发送下一帧数据

读0:发送数据没有完成,需要等待

读1:发送数据完成,可以发送下一帧数据

USART_ISR[5]:判断接收数据寄存器是否有数据可读,这位只可以读

特点:接收数据寄存器有数据,才可以读数据

读0:没有接收到数据,需要等待

读1:接收到数据,可以读这个数据

代码演示

#include "uart4.h"
//1.初始化函数
void uart4_init()
{//rccRCC->MP_AHB4ENSETR |=(0x1 << 1);RCC->MP_AHB4ENSETR |=(0x1 << 6);RCC->MP_APB1ENSETR |=(0x1 << 16);//GPIOGPIOB->MODER &=(~(0x3 << 4));GPIOB->MODER |=(0x2 << 4);GPIOG->MODER &=(~(0x3 << 22));GPIOG->MODER |=(0x2 << 22);GPIOB->AFRL &=(~(0xf << 8));GPIOB->AFRL |=(0x8 << 8);GPIOG->AFRH &=(~(0xf << 12));GPIOG->AFRH |=(0x6 << 12);//UARTif(USART4->CR1 &(0x1 << 0)){//将UE位禁止USART4->CR1 &=(~(0x1 << 0));}//1.串口初始化 8位数据位 无奇偶校验位USART4->CR1 &=(~(0x1 << 12));USART4->CR1 &=(~(0x1 << 28));USART4->CR1 &=(~(0x1 << 10));//2.设置串口一位停止位USART4->CR2 &=(~(0x3 << 12));//3.设置串口的16倍采样率USART4->CR1 &=(~(0x1 << 15));//4.设置串口不分频USART4->PRESC &=(~(0xf));//5.设置串口波特率115200USART4->BRR &=(~(0xffff << 0));USART4->BRR |=(0x22b << 0);//6.设置串口发送器使能USART4->CR1 |=(0x1 << 3);//7.设置串口接收器使能USART4->CR1 |=(0x1 << 2);//8.设置串口使能USART4->CR1 |=(0x1 << 0);
}
//2.发送一个字符
void put_char(const char str)
{//1.判断发送数据寄存器是否有数据 ISR[7]//读0:发送数据寄存器满,需要等待//读1:发送数据寄存器为空while(!(USART4->ISR &(0x1 << 7)));//2.将要发送的字符写入到发送数据寄存器中USART4->TDR &=(~(0xff));USART4->TDR =str;//3.判断发送数据是否发送完成//读0:发送数据没有完成,等待//读1:发送数据完成while(!(USART4->ISR &(0x1 << 6)));
}
//3.发送一个字符串
void put_string(const char* str)
{//判断是否为'\0'while(*str != '\0'){put_char(*str);str++;}   //一个一个发送
}
//4.接收一个字符
char get_char()
{char ch;//1.判断接收寄存器是否有数据可读 ISR[5]//读0:没有数据可读,需要等待//读1:有数据可读while(!(USART4->ISR & (0x1 << 5)));//2.将接收数据寄存器中内容读出来ch=USART4->RDR;return ch;
}
char buf[50]={0};
//5.接收一个字符串
char* get_string()
{   put_char('\n');put_char('\r');int i=0;//1.循环进行接收while((buf[i] = get_char()) != '\r'){put_char(buf[i]);i++;}put_char('\n');put_char('\r');//2.循环实现:接收一个字符之后,发送一个字符//3.当键盘回车键按下之后代表字符串接收结束'\r'//4.字符串补'\0'buf[i]='\0';return buf;
}

A7\M4核串口实验相关推荐

  1. FPGA IP核 串口实验 signaltap

    文章目录 前言 一.IP核 1. 新建工程 2. IP核建立和调用 3. 工程文件的配置 二.串口IP核 1 2. 总结 前言 之前有写过verilog对FPGA串口和sdram的操作,但是我整合代码 ...

  2. 10.1 LED灯实验(A7核和M4核)

    文章目录 LED灯实验 分析 原理图 芯片手册 RCC章节 GPIO章节 实现代码 A7核 gpio.h gpio.c main.c M4核 实验现象 LED灯实验 分析 原理图 LED灯的丝印为LD ...

  3. STM32MP157开发笔记 | 02 - 开发环境搭建(A7核、M4核)

    一.STM32MP157 1. 系列介绍 STM32MP157微处理器基于灵活的双Arm® Cortex®-A7内核(工作频率800 MHz)和Cortex®-M4内核(工作频率209 MHz)架构, ...

  4. Vivado简单串口实验,打印hello world

    前言 从Vivado 2020开始,赛灵思发布了全新的Vitis IDE组件,用于代替Xilinx SDK,它们之间的操作稍微有些不同,但都是基于Eclipse套个马甲而来. 本文将使用Vivado ...

  5. 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验

    目录 实验任务 实验框图 创建自定义 IP 封装 IP IP 封装界面配置 硬件设计(Vivado部分) Block Design搭建 添加 IP 库 约束文件 软件设计(SDK部分) 往期系列博客 ...

  6. CC2530的串口实验

    CC2530的串口实验主要有编程主要有一下几个步骤: 一.串口初始化函数(设置时钟频率-->选择用来当做串口的IO-->设置波特率-->发送中断设为0) 二.字符串发送函数(U0DB ...

  7. STM32之USART-串口通信(含串口实验详细解析)

    STM32之串口通信 - USART(含串口实验详细解析) 开发环境:Window 10 开发工具:Keil uVision5 MDK 硬件:STM32F103 资料参考: [正点原子]STM32F1 ...

  8. 【开发教程5】疯壳·ARM功能手机-串口实验教程

    ARM功能手机 --疯壳·开发板系列 串口实验教程 图1 第一节串口硬件电路 串口通过USB口及手环下载调试线引出,连接MCU的P12与P13引脚,如下图所示: 图2 第二节 UART寄存器 2.1 ...

  9. mssql 无法启动调试器 数据为空_织女星开发板启动模式修改——从ARM M4核启动

    织女星开发板启动模式修改--从ARM M4核启动 前言 刚开始玩织女星开发板的时候,想先从熟悉的ARM核入手,连上Jlink,打开MDK版本的Demo程序,编译OK,却检测不到芯片,仔细看了一下文档, ...

最新文章

  1. TensorRT Analysis Report分析报告
  2. AI可以在游戏里称霸,但是解决现实问题太难了
  3. BeautifulSoup库使用
  4. Spring MVC实现文件下载
  5. 39. 组合总和020(思路+详解)
  6. React 点击按钮显示div与隐藏div
  7. 从内存中窃取未加密的SSH-agent密钥
  8. Ubuntu 14.04 安装 MongoDB
  9. Google+ 为什么会死?
  10. 计算机中丢失python27 dll_python27.dll
  11. 浙江省二级计算机vfp,浙江省高校计算机等级考试大纲(二级——VisualFoxPro语言程序设计大纲)...
  12. 079冒险岛mysql解封账号_冒险岛079MAX稀有整合2020年度版,亲测一键端10人限制端...
  13. vue项目html5调取手机摄像头录像并上传
  14. iMeta | 北大陈峰/陈智滨等发表口腔微生物组研究中各部位取样的实验方法(Protocol)...
  15. vue 前端进行tab页面切换时,要求不刷新
  16. android系统源码学习 -- 蓝牙 bluetooth (一) 入门
  17. 哪个软件能代替斐讯路由_斐讯路由app下载-斐讯路由app安卓版下载v7.2.0-聚侠网...
  18. 有关计算机英语作文素材,英语作文素材范文
  19. 音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面
  20. 知乎1w视频播放能赚多钱?今天来大揭秘

热门文章

  1. Java垃圾回收机制---对象死亡判断
  2. JavaScript 中 3+ 换成 换成3 也就是把+替换了。
  3. 苏神大佬的博客-科学空间
  4. July, 28(R)
  5. 汽车IVI中控开发入门及进阶(九):显示屏
  6. Timeline时间轴
  7. 如何用手机在旧楼房里拍出文艺范?
  8. Python数据类型——序列 (sequence)
  9. app专项测试之电量测试
  10. 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?