您的位置 首页 产品

经过学习USART1深化STM32F107VCT6的串口通讯

STM32有数个串口,每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的,由于STM32

STM32有数个串口,每个串口都有一个自己独立的波特率寄存器USART_BRR,经过设置该寄存器就能够到达装备不同波特率的意图,因为STM32选用分数波特率,所以STM32的串口波特率设置规模很宽,而且差错很小。

在STM32的参考手册中,串口被描绘成通用同步异步收发器(USART),它供给了一种灵敏的办法与运用工业规范NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART运用分数波特率发生器供给宽规模的波特率挑选。它支撑同步单向通讯和半双工单线通讯,也支撑LIN(部分互联网),智能卡协议和IrDA(红外数据安排)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还答应多处理器通讯。还能够运用DMA办法,完成高速数据通讯。

USART经过3个引脚与其他设备衔接在一起,任何USART双向通讯至少需求2个引脚:承受数据输入(RX)和发送数据输出(TX)。

RX: 承受数据串行输入。经过过采样技能来差异数据和噪音,然后康复数据。

TX: 发送数据输出。当发送器被制止时,输出引脚康复到它的I/O端口装备。当发送器被激活,而且不发送数据时,TX引脚处处于高电平。在单线和智能卡形式里,此I/O口被一起用于数据的发送和接纳。

一般有两种工作办法:查询和中止。

(1)查询:串口程序不断地循环查询,看看当时有没有数据要它传送。假如有,就协助传送(能够从PC到STM32板子,也能够从STM32板子到PC)。

(2)中止:平常串口只需翻开中止即可。假如发现有一个中止来,则意味着要它协助传输数据——它就立刻进行数据的传送。相同,能够从 PC到STM3板子,也能够从STM32板子到PC

留意:

发起和承受都需求合作标志等候。

只能对一个字节操作,对字符串等很多数据操作需求写函数

运用串口所需设置:RCC初始化里边翻开RCC_APB2PeriphClockCmd

(RCC_APB2Periph_USARTx);GPIO里边管脚设定:串口RX(50Hz,IN_FLOATING);串口TX(50Hz,AF_PP);

printf函数重界说(不用了解,调试经过以备后用)

需求c规范函数:#include “stdio.h”

增加为putchar函数。

int putchar(int c) //putchar函数

{if (c == ){putchar();} //将printf的变成

USART_SendData(USART1, c); //发送字符

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} //等候发送完毕

return c; //返回值

}

printf运用变量输出:%c字符,%d整数,%f浮点数,%s字符串,/n或/r为换行。留意:只能用于main.c中。

别的:

STM32支撑三个串口,在usart1默许引脚被占用的情况下能够将usart1映射到PB0.6和PB0.7上。完成的办法 如下:

1、翻开GPIO的AFIO时钟,运用stm32功能模块之前,有必要开时钟;

2、使能USART1的映射,

3、装备USART1映射后的GPIO(PB0.6,PB0.7)

详细完成:

1、在set_systm函数中增加如下模块,翻开AFIO时钟,使能USART1映射

#ifdef USB_TO_KLINE_USART1_REMAP

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

#endif

2、在set_systm函数中增加如下模块,装备USART1映射后的GPIO

#ifdef USB_TO_KLINE_USART1_REMAP

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

#else

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

#endif

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/317354.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部