1. 串口的基本概念
在STM32的参阅手册中,串口被描绘成通用同步异步收发器(USART),它供给了一种灵敏的办法与运用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART运用分数波特率发生器供给宽规模的波特率挑选。它支撑同步单向通讯和半双工单线通讯,也支撑LIN(部分互联网),智能卡协议和IrDA(红外数据安排)SIR ENDEC标准,以及调制解调器(CTS/RTS)操作。它还答应多处理器通讯。还能够运用DMA办法,完结高速数据通讯。
USART经过3个引脚与其他设备衔接在一起,任何USART双向通讯至少需求2个引脚:承受数据输入(RX)和发送数据输出(TX)。
RX: 承受数据串行输入。经过过采样技能来差异数据和噪音,然后康复数据。
TX: 发送数据输出。当发送器被制止时,输出引脚康复到它的I/O端口装备。当发送器被激活,而且不发送数据时,TX引脚处处于高电平。在单线和智能卡形式里,此I/O口被一起用于数据的发送和接纳。
2. 串口的怎么作业的
一般有两种办法:查询和中止。
(1)查询:串口程序不断地循环查询,看看当时有没有数据要它传送。假如有,就协助传送(能够从PC到STM32板子,也能够从STM32板子到PC)。
(2)中止:平常串口只需翻开中止即可。假如发现有一个中止来,则意味着要它协助传输数据——它就立刻进行数据的传送。相同,能够从 PC到STM3板子,也能够从STM32板子到PC。
3. 串口的硬件衔接
我用的斗争STM32 V3开发板具有二路RS-232 接口,CPU 的PA9-US1-TX(P68)、PA10-US1-RX(P69)、PA9-US2-TX(P25)、PA10-US2-RX(P26)经过MAX3232 完结两路RS-232 接口,别离衔接在XS5 和XS17 接口上。 USART1 在体系存储区发动形式下,将经过该口经过PC对板上的CPU进行ISP,该口也可作为一般串口功用运用,JP3,JP4 的短路冒拔去,将断开第二路的RS232通讯,仅作为TTL 通讯通道。
4. 编程实例
咱们要对串口进行操作,首要要将STM32的串口和CPU进行衔接。在Windows操作体系中,有一个自带的体系软件叫“超级终端”。VISTA以上的操作体系去掉了这个软件,不过能够从XP的体系中,仿制“hypertrm.dll”和“hypertrm.exe”到“windows/system32”文件夹下,然后双击运转hypertrm.exe,就能够看见超级终端的运转界面了。
运转超级终端今后,会弹出“衔接描绘”,输入称号和挑选图标,这个当地随意写个什么称号都能够。然后弹出“衔接到”设置,在“衔接时运用”挑选你自己PC和STM32衔接的COMx,假如不知道是哪个COM口的话,能够在PC的设备管理器中找到。在挑选好COM口之后,会弹出一个“特点”对话框,在“位/秒”挑选和你STM32中设置的波特率共同就好,数据位也是依照STM32的设置来挑选,奇偶校验挑选无,中止位挑选1,数据流操控挑选无。留意,以上的选项都必须和STM32中的串口设置相匹配,要不然可能会呈现一些不知道过错。
装备好超级终端之后,咱们便能够开端对STM32进行编程了。编程一般依照如下过程进行:
(1) RCC装备;
(2) GPIO装备;
(3) USART装备;
(4) NVIC装备;
(5) 发送/接纳数据。
在RCC装备中,咱们除了惯例的时钟设置以外,要记住翻开USART相对应的IO口时钟,USART时钟,还有管脚功用复用时钟。
在GPIO装备中,将发送端的管脚装备为复用推挽输出,将接纳端的管脚装备为浮空输入。
在USART的装备中,经过USART_InitTypeDef结构体对USART进行初始化操作,依照自己所需的功用装备好就能够了。留意,在超级终端的设置中,需求和这个里边的装备相对应。由于我是选用中止接纳数据的办法,所以记住在USART的装备中药翻开串口的中止,一起最终还要翻开串口。
在NVIC的装备中,主要是USART1_IRQChannel的装备,和曾经的笔记中叙述的中止装备相似,不会装备的能够参阅曾经的笔记。
悉数装备好之后就能够开端发送/接纳数据了。发送数据用USART_SendData()函数,接纳数据用USART_ReceiveData()函数。详细的函数功用能够参阅固件库的参阅文件。依据USART的装备,在发送和接纳时,都是选用的8bits一帧来进行的,因而,在发送的时分,先拓荒一个缓存区,将需求发送的数据送入缓存区,然后再将缓存区中的数据发送出去,在接纳的时分,相同也是先接纳到缓存区中,然后再进行相应的操作。
留意在对数据进行发送和接纳的时分,要检查USART的状况,只需比及数据发送或接纳结束之后才干进行下一帧数据的发送或接纳。选用USART_GetFlagStatus()函数。
一起还要留意的是,在发送数据的最开端,需求铲除一下USART的标志位,不然,第1位数据会丢掉。由于在硬件复位之后,USART的状况位TC是置位的。当包括有数据的一帧发送完结之后,由硬件将该方位位。只需当USART的状况位TC是置位的时分,就能够进行数据的发送。然后TC位的置零则是经过软件序列来铲除的,详细的过程是“先读USART_SR,然后写入USART_DR”,只需这样才干够铲除标志位TC,但是在发送榜首帧数据的时分,并没有进行读USART_SR的操作,而是直接进行写操作,因而TC标志位并没有清空,那么,当发送榜首帧数据,然后用USART_GetFlagStatus()检测状况时回来的是现已发送结束(由于TC位是置1的),所以程序会立刻发送下一帧数据,那么这样,榜首帧数据就被第二帧数据给覆盖了,所以看不到榜首帧数据的发送。
依照上面的办法编程后,咱们便能够在超级终端上检查串口通讯的详细状况了。我的这个例程,在硬件复位今后,能够立刻在超级终端上看见“Welcome to my STM32! Please press any key!”字样,然后假如在超级终端中经过PC机键盘按下相应的键,则这个键会发送到STM32中,而且立刻回来到PC机的超级终端上,因而能够立刻从超级终端的页面中看到按下的相应的键。
5. 程序源代码
#include “stm32f10x_lib.h”
FlagStatus RX_status;
void RCC_cfg();
void GPIO_cfg();
void USART_cfg();
void NVIC_cfg();
int main()
{
int i;
unsigned char TxBuf1[] = “Welcome to my STM32! Please press any key!”;
RCC_cfg();
GPIO_cfg();
NVIC_cfg();
USART_cfg();
//铲除标志位,不然第1位数据会丢掉
USART_ClearFlag(USART1,USART_FLAG_TC);
//发送数据
//PB5的作用是显现正在发送数据
//当有数据在发送的时分,PB5会亮
for( i=0;TxBuf1[i]!=;i++)
{
USART_SendData(USART1,TxBuf1[i]);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
//等候数据发送结束
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
while(1);
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/259576.html