[08]USART串口编程.pdf

上传人:索**** 文档编号:76248149 上传时间:2023-03-08 格式:PDF 页数:6 大小:277.54KB
返回 下载 相关 举报
[08]USART串口编程.pdf_第1页
第1页 / 共6页
[08]USART串口编程.pdf_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《[08]USART串口编程.pdf》由会员分享,可在线阅读,更多相关《[08]USART串口编程.pdf(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Copyright?2009-2010 福州芯达工作室ALL rights reserved1STM32入门系列教程串口的编程Revision0.01(2010-04-21)“副教橱依附歼Emmpw 部2想眼切。S边站起Copyright?2009-2010 福州芯达工作室ALL rights reserved2很多书籍或者教程,在介绍串口的时候,总会先介绍 UART 的功能多么强大。在这里,笔者认为,功能强大,可以红外,可以流控,那跟我有啥关系?我只要让串口成为我的工具即可。我们对串口编程,熟悉串口,只是想利用串口来调试信息等。先别忙着看书,大家对串口编程前,应该明确如下几个问题:1、串口的

2、作用:用在STM32 板子和 PC机通信的。我们调试的时候,无法知道是否正确,就可以用STM32 的 cpu,给串口输出一些信息给PC,我们通过屏幕(实际上是终端串口软件),可以看到这些信息,从而知道当前程序的错误可能出现的位置。当然,也可以在 PC 的键盘敲打命令,让串口帮传递给 STM32板子,来执行这些命令。2、串口到底如何工作的?一般有两种方式:查询和中断。(1)查询:串口程序不断地循环查询,看看当前有没有数据要它传送。如果有,就帮助传送(可以从PC到STM32板子,也可以从STM32板子到PC)。(2)中断:平时串口只要打开中断即可。如果发现有一个中断来,则意味着要它帮助传输数据它就

3、马上进行数据的传送。同样,可以从 PC 到 STM32板子,也可以从 STM32 板子到 PC。3、如何通过编程,让串口工作在查询或中断方式下?由于现实项目中,一般采用中断方式来处理串口,为方便大家编程,我们在例程目录中,给出了中断和查询两种方式的代码,仅供参考。OK,明白以上三个问题后,让我们开始串口的学习吧!我们分几个步骤来学习串口。步骤一从硬件开始学习。大家先打开芯达STM32 开发板附带的原理图。找到串口部分。笔者把它截图如下。我们发现,串口模块的电路是这样的:STM32的 CPU 引脚,通过两个 PA 端口的引脚 PA10和 PA9,连接到一个 SP3232芯片,或者 MAX232

4、芯片。然后再连接到DB9 串口座上。由于 232 芯片可以允许走两路信号,因此,我们扩展了一个串口COM2,请注意,如无特别说明,我们都将使用 COM1。SP3232EEN芯片能帮助把数据信号转换成电脑232接口能识别的信号。其转换是自动进行的。因此,我们只需要把要发送的数据送给引脚PA9,然后再串口COM2 5 9 OND RXDO XI咱BOXCONN DB9 COM!GND 万虑。RTSO C21 I I FRXDO I叉DO罩、飞.:、U4 1口!川忡3VDD 104 V+I 2 11-t C24 Cl 104 4 I 6 H5 飞 J.I 104 s 臼m H干PA2 UAR丁213

5、 RUN TUN 12 PA3 UARTI 14 nour RIOUT 10 PA9 UART!7 nour n剧9PAIO UART!8 R2卧JR20矿TL SP3232EEN 串口电路Copyright?2009-2010 福州芯达工作室ALL rights reserved3座的引脚 3 上去接收数据即可。反之,接收数据也是一样。这里您可能有个疑问,为啥使用 PA9和 PA10?大家下载 STM32 的 datasheet文档后,在 GPIO 的复用功能章节,即可找到原因:原来这两个引脚是USART 复用的,呵呵。另外,固件函数中的串口例子,使用的也是 PA9 和 PA10。当然还有其

6、他复用的GPIO 引脚,比如 PA2,PA3 等。步骤二初始化串口。请您打开 STM32F103xxx 参考手册与 STM32 固件库使用手册。我们的思路和之前一样,根据固件库使用手册中给出的步骤来配置串口。1、要声明一个结构:GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDef USART_InitStructure;这里顺便也声明了GPIO 的结构。原因是:串口是需要使用IO 口来进行发送和接收的。2、设置该结构中的成员:串口的结构成员设置如下:USART_StructInit(&USART_InitStructure);USART_In

7、itStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_InitStructure.USART_HardwareFlowControl=USA

8、RT_HardwareFlowControl_None;GPIO 结构的成员设置如下:GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Ini

9、t(GPIOA,&GPIO_InitStructure);3、调用函数 xxx_Init()来初始化外设(包括IO 和 USART):USART 的初始化函数:USART_Init(USART1,&USART_InitStructure);由于 GPIO 的外设初始化已经放在成员设置后面,因此这里没有列出来。4、调用 xxx_Cmd(xxx,ENABLE);函数来使能外设。这里只需要使能 USART 即可。GPIO 的固件中,没有使能即可使用。USART_Cmd(USART1,ENABLE);由于本文档使用的是中断方式来触发串口收发数据,因此,我们在使能串口之前,也把发送和接收的中断使能打开:

10、USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);USART_ITConfig(USART1,USART_IT_TXE,ENABLE);发送使能和接收使能,可以参考固件库的函数库Copyright?2009-2010 福州芯达工作室ALL rights reserved45、别忘了加上外设的时钟使能哈从下页的截图,可以看出,GPIOA 和 USART 都在 APB2 上。因此我们调用的函数如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_G

11、PIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,ENABLE);步骤三操作串口收发数据芯达 STM32 的思路是:首先让STM32 的 CPU 发送一些欢迎信息,从串口打印出来。然后接收中断,该中断来自键盘输入。只要键盘输入一个字符,即打印出该字符,从而验证串口编程是否成功。固件库的函数如何让串口发送和接收数据呢?它给我们提供了两个函数:USART_SendData();省略函数参数USART_ReceiveData();先来看发送。我们的程序在初始化串口之后,马上就会打印欢迎信息。也就是从 STM32 的

12、 CPU 发送信息,在电脑屏幕上显示出来,只要如下操作即可:/*=USART 打印欢迎信息=*/for(i=0;TxBuf1i!=0;i+)USART_SendData(USART1,TxBuf1i);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET);很简单吧,呵呵,TxBuf1 是一个发送缓存。我们事先把数据放在这个数组里了:unsignedcharTxBuf1100=这里可以自定义需要输出到串口的字符;这里要注意的是,当我们发送一个字符后,必须查看状态标志,这里是发送是否完成的标志:USART_FLAG_TC,如果发送完成了,则才

13、可以发送下一个数据。函数 USART_GetFlagStatus();就是用来做这个判断的。下面开始另外一个操作:键盘输入什么字符,就得显示什么字符。我们的代码如下:while(1)co I IS10 USART GPIOC在APB2上-8刷geI./I B1 Br同e1 i I Reset&clock control(RCC)DAC SP13112S GPIOD PWR SP12/125 OMA R伺uestIA.飞iBKP IWDG bxCAN VIDG GPIOG USS ATC TIMl EXTI 12C2 TIM7 TIMS AFIO 12C1 TIM6 GPI。AUARTS TIM

14、S GPI06 UART4 TIM4 USART3 TIM3 USART2 TIM2 Copyright?2009-2010 福州芯达工作室ALL rights reserved5GPIO_SetBits(GPIOE,GPIO_Pin_1);RX_status=USART_GetFlagStatus(USART1,USART_FLAG_RXNE);if(RX_status=SET)USART_SendData(USART1,USART_ReceiveData(USART1);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET);GPIO_

15、ResetBits(GPIOE,GPIO_Pin_1);Delay(0 xFFFFF);思路:先判断接收的状态标志USART_FLAG_RXNE,如果接收的寄存器非空,说明已经接收到键盘发送来的数据,于是就把这个数据从接收缓存中取出来,发送给电脑。这样电脑就可以看到刚才敲入的字符了。USART_ReceiveData(USART1);这个函数是从接收缓存取出数据。我们在这个 while 中,还加入了 GPIO 的函数:GPIO_SetBits(GPIOC,GPIO_Pin_0);GPIO_ResetBits(GPIOC,GPIO_Pin_0);这两个函数,SetBits,表示对 GPIOC 端

16、口的第 0 个引脚置 1。ResetBits,清零。由于芯达 STM32 开发板上,GPIOC 端口上的第 0 引脚连着一个 LED 灯,所以,我们可以通过观察LED 灯是否闪烁来判断串口是否正在发送。串口的编程,写到这里,已经进入尾声。如果您对串口操作还有不明白的地方,请直接到我们的官方网站:ARM 技术交流网 ,进行讨论。我们将会尽快给您做出答复。附:Copyright?2009-2010 福州芯达工作室ALL rights reserved6福州芯达工作室简介福州芯达工作室成立于2009 年 9 月,我们专注于嵌入式产品的研发与推广,目前芯达产品涉及ARM9 系列、STM32 系列。芯达团队成员均硕士研究生毕业,具有一定研发实力。我们的愿景在于把福州芯达打造成国内一流的嵌入式品牌。或许我们现在做的还不够,但是我们真的努力在做,希望通过我们的努力,能够在您学习和使用芯达产品的过程中带来或多或少的帮助。这是芯达为了配合STM32 开发板而推出的入门系列教程。如果您在看了我们的教程后,理清了思路,我们都会倍感欣慰!让我们一起学习,共同进步,在征服嵌入式领域的道路上风雨同行!官方网站:http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com