[ M3 PN ] STM32F10XXX MDK-RAM USART1 + RS232向PC发数据

news/2023/11/30 19:26:09

USARTx是用的GPIOx的引脚,所以在使用USARTx时除了要打开USARTx模块时还需要打开使用对应TX,RX引脚所对应的GPIOx时钟。


1 USART

(1) USART通道

USART(Universal Synchronous AsynchronousReceiver Transmitter,通用同步异步收发器)。具体实物表现为独立的模块化芯片,或作为集成于微处理器中的周边设备,USART通道可以非常方便的实现串行通信


STM32F10XXX芯片至少用两个引脚让其内的USART通道跟其它设备相连。STM32F10XXX芯片提供发送数据引脚(TX)与接收数据引脚(RX)两个引脚与RS-232规格设备(如Max232)相连。外加一个控制引脚(CX)与RS-485规格的设备(如Max485)相连。


(2) USART通信原理

USART通道在STM32F10XX芯片内,使用USART收/发数据需要依靠其通信原理。


[1] USART单字节发送

USART发送器发送的数据的走向为“USART_DR寄存器”à“发送移位寄存器”à“TX引脚”。数据流经TX后就标志着将STM32F10XX芯片内的数据发送到芯片外部了,可由其它模块(如MAX485)来接收STM32F10XX发送出来的数据。USART_DR寄存器中的数据是用户直接写入的


STM32F10XX USART发送数据的具体过程可用下图表述:


Figure1:USART_发送单字节原理

用这个图描述USART发送器显得有些抽象,还得配点文字说明。

A.     此模式下USART_DR寄存器的数据缓冲器(TDR)位于内部总线与发送移位寄存器之间。

B.     如果此时USART正在发送数据,对USART_DR寄存器的写操作把数据存进TDR寄存器,并在当前传输结束时(发送移位寄存器内的数据传输结束时)把该数据复制进移位寄存器。即数据传输路线为1号线。

如果此时USART没有在发送数据,处于空闲状态,对USART_DR寄存器的写操作直接把数据放进移位寄存器后,数据开始被传输。即数据走的是2号线。


[2] USART字符接收

USART接收器接收的数据的走向为“RX引脚”à“接收移位寄存器”à“接收数据寄存器(RDR)(接收模式下USART_DR寄存器的缓冲器位于内部总线和接收移位寄存器之间)”。


Figure2:USART接收单字符


2 RS232

(1) RS232芯片

RS232是一种标准。前缀“RS”表示“标准”的含义(EIA 提出的建议)。根据RS232标准,制造出了满足此标准的芯片,如Max232芯片,用此芯片接收数据的引脚就可以接收来自STMF10XXX发送数据引脚(TX)的数据,用此芯片发送数据的引脚就可以向STMF10XX接收数据引脚(RX)发送数据。由此而形成STM32F10XX芯片与MAX232芯片之间的通信。


(2) 串口线

串口线是能够跟RS232类芯片匹配的线。RS232类芯片跟串口线用接头(公头(泛指所有针式的接头)和母头(泛指所有插槽式的接头) )相连。在接头中的众多引脚中,就有一根接收数据的引脚(线)RXD和一根发送数据的引脚(线)TXD。如下图:


Figure3:串口线公头

在这里,PC 与STM3210XX 就是用串口线相连。STMF10XXX芯片USART通道的数据通过TX引脚传输给MAX232,MAX232通过接收数据引脚T1IN将接收到的数据通过T1OUT发送到串口线的RXD引脚上,然后串口线就通过RXD引脚对应的线将数据发送到电脑中对应通信模块上。反过来,当电脑向STM3210XX发送数据时,电脑通过串口线的TXD引脚将数据发送到MAX232的R1IN引脚上,MAX232再将R1IN之上的数据通过R1OUT发给STM32F10XX的RX引脚,再到USART通道。


3 USART1向 PC 发数据

(1) 通信平台

Figure4:通信平台:开发板与PC
这就是开发板、PC之间用串口线连接用来通信搭建的平台,接头与串口线部分就是一条串口线,图示为了表明传送数据所用到的两个引脚及线。为了观察通信的结果,在PC之上使用一个叫“超级终端”或者“串口调试助手”的软件来观察由板子发往PC的数据,谷歌大名之即可下载。

(2) USART1初始化

USART初始化包含三个方面:

  • USART1属STM32F10XXX芯片中APB2下模块,USARTx[x=2,3,4,5]属APB1下模块。使用任何一个外设模块都需要开启该模块的时钟。
  • USART的TX和RX引脚其实是GPIO引脚。所以,为了使用TX和RX,其一需要开启对应GPIO端口的时钟,其二需要配置I/O成为TX和RX所需要的模式。
  • 如果要使用USART中断,必须首先开启NVIC中断。
//初始化USART1
void USART1_Init( void )
{
        //开启USART1时钟,#define  USART1_RCC_EN   ( 1 << 14 )
        RCC->APB2ENR    |= USART1_RCC_EN;

        //使能USART(UE),8位数据位(M),一位停止位
        // USART_EN: (0x2000), USART_DATA_8:(0x0000), USART_STOP_BIT_1: (0x0000)
        USART1->CR1   |= USART_EN | USART_DATA_8 ;
        USART1->CR2   |= USART_STOP_BIT_1;

        //设置USART1传送数据时的波特率,此值对应的波特率为9600
        USART1->BRR= 0x1d4c;
}


//USART1 TX引脚配置
void USART1_GPIO_Init( void )
{
        //开启GPIOA时钟,GPIOA_RCC_EN:( 1 << 2 )
        RCC->APB2ENR   |= GPIOA_RCC_EN;

        //将TX引脚写0
        GPIOA->CRH &= 0xffffff0f;
        //将TX引脚配置复用功能推挽输出模式
        GPIOA->CRH   |= GPIOA_PIN_9_TX;
}

(3) USART1非中断方式发送数据

根据USART通信原理,简单的一种方式是只用状态寄存器USART_SR的一个状态位就可以实现USART数据的发送。

//发送字符串函数
void USART_Sent(unsigned char *data, int  len)
{
        int i;
        for(i = 0; i < len; ++i)
        USART_SendByte( data[i] );
}

//USART1发送字符函数
void USART_SendByte( uint16_t byte )
{
        //等TDR缓冲区的数据被复制到发送移位寄存器中
        // USART_TXE_FLAG:(0x0080)
        while( !(USART_TXE_FLAG & USART1->SR) );
        //TDR数据已被复制,可写入新数据
        USART1->DR= ( byte & (uint16_t)0x01FF);
}


主函数:
int  main( void )
{
        USART1_Init(  );
        USART1_GPIO_Init(  );

        //使能USART1发送器功能,USART_TE_EN:(0x0008)
        USART1->CR1    |=  USART_TE_EN ;

        while( 1 ){
                USART_Sent( (unsigned char *)("Hello, Mxl, Another Nice Day\n"), sizeof( "Hello, Mxl, Another Nice Day\n" ) )
        }
}
从建立一个MDK-ARM STM32F10XX的工程如流水灯工程开始到这里,不使用固件库函数的代码也可以使用不多的代码实现USART发送(暂时这些函数无固件库函数灵活的说)。编译通过后,按照Figure 5的连线方式将PC和开发板连接起来,用JLink下载这段程序到板子上面运行,可在PC“超级终端”软件之上看到STM32F10XXX向PC发送的数据(在超级终端之上的属性设置要和STM32F10XXX程序中发送数据的设置一样,如波特率值,数据位等属性,不然有显示不正常的嫌疑):

Figure6:PC“超级终端”上接收数据显示

Practical Note Over.


http://www.ppmy.cn/news/312157.html

相关文章

Python爬取视频之爱情电影及解密TS文件和两种合并ts!

俗话说&#xff0c;兴趣所在&#xff0c;方能大展拳脚。so结合兴趣的学习才能事半功倍&#xff0c;更加努力专心&#xff0c;apparently本次任务是在视频网站爬取一些好看的小电影&#xff0c;地址不放&#xff08;狗头保命&#xff09;只记录过程。 实现功能&#xff1a; 从…

[ M3 PN ] STM32F10XXX(Cortex-M3) MDK-RAM TIMx中断

1定时器基础 (1) 概念 概念还是需要读参考手册获取。 可编程通用定时器TIMx[x2,3,4,5]的主要部分是一个16位计数器(CNT)和与其相关的自动装载(APP)寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。计数器由预分频器的时钟输出CK_CNT驱动&#xff0c;计数器的时…

pc 安装玩centos 开机卡 switching_程序员的出行标配,壹号本工程师PC掌上电脑评测...

在刚刚过去的十一长假小伙伴都出去玩耍了吗&#xff1f;香蕉哥为了错峰玩的更爽快&#xff08;便宜&#xff09;所以选择了6号才出发&#xff0c;然后请了几天假北京直飞厦门打算给自己放个假。那是一个风和日丽的下午&#xff0c;香蕉哥正在轮渡码头乘船去鼓浪屿的途中&#x…

[ M3 PN ] STM32F10XXX(Cortex-M3) MDK + J-Link环境搭建 建立工程 下载程序

1 Cortex-m3与stm32f10xxx Cortex-M3是一个32位的核&#xff0c;stm32f10xxx(如stm32f103vc)芯片采用Cortex-M3作为内核。在stm32f103vc内&#xff0c;Cortex-M3通过ICode、DCode及System总线与片内其它模块发生联系&#xff0c;所有的APB设备由AHB到APB的桥连接。以m3为内核的…

仿小米商城电脑官网-纯HTML+CSS(含轮播图)

来自作者的话 这是我第一次写博客&#xff0c;也是为了激励自己学习&#xff0c;分享一些前端学习的知识&#xff0c;有写的不好的多多包涵。下面是参考的一些博客的链接 https://blog.csdn.net/weixin_43976890/article/details/89473101 下面先放上成品网页图&#xff08;个…

计算机领域kg是什么,《有话好好说》中的电脑是什么型号的

满意答案 arrarfarm 2014.02.05 采纳率&#xff1a;47% 等级&#xff1a;12 已帮助&#xff1a;10125人 Toshiba T2130cs/520 配置如下: Satellite(TM) T2130CS/T2130CT Specifications Genral Information Model Number: T2130CS w/520 million byte (500MB) HDD, color Dy…

[STM32] NOTE02-正点原子STM32F429IGT6开发板资源分析

核心板&#xff1a; 图中出现的chips & 重要接口: 串口通信接口&#xff08;TXD, RXD, GND&#xff09; 1.SPI FLASH 32MB SPI Serial Peripheral Interface 串行接口 1、SPI Flash &#xff08;即SPI Nor Flash&#xff09;是Nor Flash的一种&#xff1b; 2、NOR Flash根…

数据治理8种方法

今天给大家推荐的是数据治理套路8法&#xff0c;个人觉得这8种方法中监管驱动法和利益驱动法是最常见的&#xff0c;也是一直在治&#xff0c;但只能局部治理的方法&#xff0c;未来是数字时代&#xff0c;必须体系构建&#xff08;顶层设计&#xff09;价值驱动&#xff08;利…

9008v android操作系统 电量,三星N9008V (GALAXY Note 3 移动4G Android 4.4)救砖教程 救砖包 刷回官方系统支持OTA升级...

奇兔ROM市场小编分享一下三星N9008V (GALAXY Note 3 移动4G Android 4.4)救砖教程和三星N9008V (GALAXY Note 3 移动4G Android 4.4)救砖包&#xff0c;三星刷机教程都是差不多的&#xff0c;因为三星官方的固件包都是支持线刷的&#xff0c;在这个刷机的过程中是有一些小细节是…

CAN总线简易入门教程

点击加入技术交流群 相关文章 CAN总线简易入门教程 CAN总线显性电平和隐性电平详解 STM32的CAN总线调试经验分享 文章目录 相关文章什么是CAN总线&#xff1f;物理层差分信号连接方式CAN节点 CAN协议如何寻址&#xff1f;帧类型数据帧远程帧错误帧过载帧 消息时序以及同步位时…

2-STM32开发板(Cortex-M3)和exynos4412(Cortex-A9)之间的区别和联系

一、ARM的简介——what?? part1&#xff1a;ARM代表什么&#xff1f; 1)ARM是"Advanced RISC Machine"的缩写&#xff0c;最早的ARM处理器诞生于80年代的英国&#xff0c;目前总部在英国剑桥 2)ARM公司自己并不生产或者销售芯片&#xff0c;它采用技术授权模式…

用Python实现电脑与手机之间的文件快速传输

有的时候想在Linux和手机之间互传文件那可真是一个难啊 看了这篇文章相信你会喜欢这种传输文件的方式 只需要电脑配置好Python即可 废话&#xff0c;不使用数据线和第三方工具&#xff0c;不用考虑各种驱动等等问题的文件传输肯定香啊 本文参考了微信公众号 “学习python的…

魅族手机调试和VID

魅族手机USB接上电脑&#xff0c;死活不能调试&#xff0c;翻了半天网络&#xff0c;找到答案&#xff1a; 一、 现象&#xff1a; ./adb devices List of devices attached emulator-5554 device ???????????? no permissions二、 原因 这是由于我…

n9009+android+4.4.2,三星N9009 (Galaxy Note 3 电信版 Android 4.4)救砖教程 救砖包 刷回官方系统支持OTA升级...

奇兔ROM市场小编在这给大家分享一下三星N9009 (Galaxy Note 3 电信版 Android 4.4)救砖教程和三星N9009 (Galaxy Note 3 电信版 Android 4.4)救砖包&#xff0c;说到救砖&#xff0c;就会想到线刷教程&#xff0c;因为官方ROM固件包支持线刷救砖&#xff0c;各种原因导致手机变…

教程用手机运行Windows的迷你手机显示器变成电脑的副屏第二块显示器支持USB触摸

[教程]用手机运行Windows的迷你手机显示器变成电脑的副屏第二块显示器 1.首先是演示视频 手机运行Windows的迷你手机显示器变成电脑的副屏第二块显示器支持USB触摸 废旧小米红米Note手机运行Win10系统!你信吗?反正我是不信 用手机运行Windows的迷你手机显示器变成电脑的副屏…

java区分手机端和电脑端访问

// 通过请求获取头部的user-agent参数信息 String userAgent ServletActionContext.getRequest().getHeader("user-agent");/** 电脑端&#xff0c;谷歌浏览器访问&#xff1a; Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom…

Arduino Uno R3开发(1)——据说通过蜂鸣器可以播放《鸡你太美》?

昨天写了一篇RFID开发&#xff0c;但是视频课程太难&#xff0c;只能从更基础的Arduino Uno R3 开发进行学习 一起进行Arduino Uno R3的学习吧&#xff0c;我之前从未接触硬件 如果奔着鸡你太美来的直接翻到最后 点击跳转Arduino函数参考手册 第一步Arduino驱动的安装&#…

note

1 周末班上课笔记2 1.从redhat centos过度到ubuntu3 a)修改网络配置4 b)ubuntu安装5 建议在安装ubuntu的过程中断网6 分区:7 建议分3个区8 1.home分区 100G----->/home9 2.交换分区 8G10 3.根分区 30G------>/11 c)软件管理12 centos redhat --->yum rpm13 ub…

Rocketmq面试(六)Rocketmq6种找不到Broker的情况

1.发送消息 Rocketmq Client在发送消息的时候&#xff0c;会根据topic首先从本地缓存获取Broker&#xff0c;获取Broker&#xff0c;如果获取不到&#xff0c;就会到Name Server集群中获取 2.消息偏移量 客户端获取消息偏移量&#xff08;Consume Offset&#xff09;的时候&…

SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…
最新文章