stm32f4USART中USB转串口通信

发布者:平凡梦想最新更新时间:2017-02-05 来源: eefocus关键字:stm32f4  USART  USB  串口通信 手机看文章 扫描二维码
随时随地手机看文章

初学stm32,初次接触USART串口通信。

对USART通信硬件原理的个人总结。从MCU(Micro Controller Unit,也就是ST芯片)出来的TTL电平经过电平转换芯片转化为USB电平,从而实现与PC的通信。

USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器。

这边只作异步通信说,异步通信与同步通信的主要区别区别是时钟,所以这边的SLCK是关闭的。USART总共有TX、RX、nRTS、nCTS、SCLK这5个外接引脚(框图中的SW_RX在内部,n表示低电平有效)。在学习与PC上位机通信时,是关闭硬件流控制模式的,所以异步通信只涉及到TX(Transmit)和RX(Receive)这两个引脚。

大致思路:数据由软件传给发送数据寄存器USART_DR(TRD),判断TC(Transmit complete,发送完成)是否置1。若置1,表示发送移位寄存器发送完成,发送数据寄存器中的数据发送到发送移位寄存器开始发送,判断TXE(Transmit data register empty,发送数据寄存器为空),读取下一个数据到TDR;若TC为0,则等待。TC置0由软件序列(读取USART_SR寄存器,然后写入USART_DR寄存器),也可以向该位写“”0“”实现。硬件复位时,TC由硬件置1。

    接收数据时,数据传入接收移位寄存器,再传入读取数据寄存器,这时RXNE(Read  data register not empty,读取数据寄存器不为空)置1,可产生中断标志RXNEIE。

数据格式:1位起始位,8位数据位(USART_CR1,控制寄存器1中的位12-M置0),无校验位(USART_SR,状态寄存器中位1-PE置0——无奇偶校验错误),1位停止位(USART_CR2,控制寄存器2中位13:12-STOP赋值00)。因为是开发板与PC机之间的通信,距离短,通信环境好,所以不设置奇偶校验。

使用的是USART1,TX选择的是PA9,RX选择的是PA10。

代码流程:1、初始化   a、打开外设时钟(如果想使用任何外设,都要先使能时钟),打开挂载到AHB1上的GPIOA和挂载到APB2上的USART1的时钟,调用固件库函数RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE)和RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE)

b、初始化串口相关的GPIO口,对GPIO_InitTypeDef GPIO_InitStruct结构体进行赋值,再通过GPIO_Init(GPIOA,&GPIO_InitStruct)映射给寄存器

c、配置选择复用功能,调用固件库函数GPIO_PinAFConfig(形参,形参,形参)确定引脚的复用功能

d、初始化串口,USART初始化结构体,设置波特率、数据位长度、停止位、校验位选择、硬件流控制模式选择、USART模式控制(使能接收/发送),最后通过USART_Init(...)完成配置

e、如果需要中断执行服务,则初始化NVIC(嵌套向量中断控制器),若不需要,则跳过

f、使能串口,调用USART_Cmd(.....)使能USART1

    2、编写数据发送函数,由于USART_DR只有8位有效,所以这里分为字节发送、双字节发送、字符串发送、数组发送,这四种发送均基于固件库函数USART_SendData(...),在发一个字节时,判断TXE是否为1,若为1,则准备发送下一个数据至发送数据寄存器;若为0,则等待。获取中断状态位的固件库函数为ITStatus USART_GetITStatus(...),最后可以加以判断TC是否为1,即判断发送是否完成。

    3、编写数据接收函数,调用固件库函数USART_ReceiveData(...)获取最新的USARTx的数据。判断RXNE,为1表示接收完成,为0表示未接收数据,所以数据接收函数的内容应该在判断RXNE为1的条件下编写。

   4、main()函数调用即可。

根据野火教程,参考手册,新手理解,纯粹为个人重新回忆一遍。若有不对,还请指出,若写的不好,好多见谅。

作为新手,还有诸多问题不懂,1、如果设置奇偶校验,那接收方是不是应该要处理?如何处理?如果说单片机与PC通信是这样,那单片机与单片机呢?

2、发送8位的数据要写一个函数,发送16位的又要写一个函数,发送数组只能发送8字节类型的数组,可能是我认识还不够,对我来说是不明白。


关键字:stm32f4  USART  USB  串口通信 引用地址:stm32f4USART中USB转串口通信

上一篇:STM32F429库函数之I2C读取EEPROM
下一篇:使用固件库操作STM32F4时的必要配置

推荐阅读最新更新时间:2024-03-16 15:32

安全认证让USB Type C不再纠结于数据安全
USB Type C新型连接器的数据传输速率高达10 Gbps,且供电功率最高可以达到100W,除此之外,还能实现USB数据接口正反面插的功能。而且,除了实现USB本身的数据传输, 电力传输 的功能之外,它还可以传输HDMI、DP、MHL等不同协议的数据,是一个真正的智能接口协议。因此,下一代消费电子产品将普遍配备Type C接口,半导体厂商也纷纷针对这一应用推出新技术/解决方案。   在消费电子产品性能日新月异的今天,传统的USB接口协议开始跟不上产业发展的步伐了, USB Type C的出现可以说是众望所归,毕竟其标准性是没有其他接口可以替代的。比如快速充电,虽然业界出现多种快充方案,但是,大都针对厂商自家产品,并不通用。而
[嵌入式]
直接使用单片机的USART发送数据
一、使用USART发送数据   我们在写单片机程序的时候,在Debug时,往往要用到串口输出信息,这是会使用printf打印出我们想要的信息来,但是printf有一个弊端,就是输出打印时间较长。这样在一些对时间精度要求非常高的场合,使用printf将会带来一系列问题,这时,如果使用单片机的USART自定义一个协议,直接发送数据到上位机,将会得到我们想要的效果。下面对怎样使用USART发送数据做一个整理。 1、发送单个字符 void USART1_PutChar(u8 ch) { USART_SendData8(USART1,(u8)ch); while(USART_GetFlagStatus(USART1,USART_
[单片机]
USB入门系列之三 —— USB的电气特性
标准的USB使用4根线:5V电源线(Vbus),差分数据线负(D-),差分数据线正(D+),地(Gnd)。在USB OTG中,又增加了一种mini接口,使用的是5根线,比标准的USB多了一根身份识别(ID)线。USB使用的是差分传输模式,有两根数据线,分别是D+和D-。在USB的低速和全速模式中,采用的是电压传输模式。而在高速模式下,则是电流传输模式。关于具体的高低电平门限值,请参看USB协议。为了防止出现长时间的0或者1(这样不利于时钟信号的提取),在发送数据前要经过位填充处理。然后再将数据串行化,发送到数据线上,由两根数据线的差分值来表示0或者1。而在接收端,则刚好是相反的过程。接收端采样数据线,将数据并行化,并同时去掉未填充,
[嵌入式]
USB3.0 主机控制器uPD720200在嵌入式媒体网关上的应用
一:嵌入式媒体网关的系统架构 嵌入式媒体网关通俗的来说就是一台嵌入式的计算机,其架构和我们平常了解的个人电脑的架构基本类似,只是在普通个人电脑的基础上简化了相关的输入输出设备,以降低整个系统的成本。大多数嵌入式媒体网关的系统框图如下: 从框图我们可以看出来,嵌入式CPU是整个系统的核心,嵌入式CPU本身带有各种各样的外部I/O接口。就上面的框图而言,SDRAM为系统软件的运行提供动态存储器空间、FLASH用来存储系统的固件代码、SATA和USB2.0接口用来连接外部存储装置、PCI Express接口用来给系统扩展其他的功能卡、以太网接口为系统提供网络连接功能。通常来讲,嵌入式媒体网关运行Linux操作系统,通过网络来访问
[嵌入式]
STM32CubeMX软件工程描述_USART配置过程
Ⅰ、写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍、下载与安装 STM32CubeMX使用方法及功能介绍 STM32CubeMX新建工程+基本IO配置过程 本文接着前面 STM32CubeMX 文章结合USART实例,讲述关于STM32CubeMX新建USART工程,以及新建好完成的软件工程。最终通过STM32CubeMX工具配置完成实现USART串口通信的软件工程。 本文使用 Keil(MDK-ARM) V5 软件为编译环境,如果你没有安装最新版本的软件,请安装Keil(MDK-ARM) V5版本的软件,具体过程可以参考我的一篇文章: MDK-ARM下载与安装 关于本文的更多详情
[单片机]
STM32CubeMX软件工程描述_<font color='red'>USART</font>配置过程
关于STM32F4定时器时钟频率问题
从时钟树中我们可以得知 (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线 (2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知, (1)当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟; (2)而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM
[单片机]
关于<font color='red'>STM32F4</font>定时器时钟频率问题
ARM和LINUX系统下嵌入式USB主机的设计
1 引言 通用串行总线(Universal Serial Bus,即USB)是一种新型的高速串行总线,作为一种快速、灵活的总线接口,已经在电子产品中广泛应用。同时人们对USB的期望也越来越高,希望USB能应用在各种计算机领域中。但是,由于USB通信模型是一种Host/Slave主从式结构,经由USB总线进行通信的双方必须有一方在通信控制中担当主机,而两个USB设备之间则无法直接进行基于USB的数据交换。这就大大限制了USB在嵌入式设备中的应用。 ARM( Advanced RISC Machine)作为一种低功耗、高性能的32位嵌入式微处理器,在中高端嵌入式设备开发中有着广泛的应用。有些ARM芯片的生产厂商在以ARM为内核的微
[单片机]
ARM和LINUX系统下嵌入式<font color='red'>USB</font>主机的设计
基于STM32模拟UART串口通信
UART工作原理 UART即通用异步收发器,是一种串行通信方式。数据在传输过程中是通过一位一位地进行传输来实现通信的,串行通信方式具有传输线少,成本底等优点,缺点是速度慢。串行通信分为两种类型:同步通信方式和异步通信方式。 但一般多用异步通信方式,主要因为接受和发送的时钟是可以独立的这样有利于增加发送与接收的灵活性。异步通信是一个字符接着一个字符传输,一个字符的信息由起始位、数据位、奇偶校验位和停止位组成。 每一个字符的传输靠起始位来同步,字符的前面一位是起始位,用下降沿通知收方开始传输,紧接着起始位之后的是数据位,传输时低位在前高位在后,字符本身由5~8位数据位组成。 数据位后面是奇偶校验位,
[单片机]
基于STM32模拟UART<font color='red'>串口通信</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved