芯达STM32入门系列教程之八《USART串口编程》
STM32教程
STM32 入门系列教程
串口的编程
(2010-04-21)
很多书籍或者教程,在介绍串口的时候,总会先介绍UART的功能多么强大。在这里,笔者认为,功能强大,可以红外,可以流控,那跟我有啥关系?我只要让串口成为我的工具即可。我们对串口编程,熟悉串口,只是想利用串口来调试信息等。
先别忙着看书,大家对串口编程前,应该明确如下几个问题:
1、串口的作用:用在STM32板子和PC机通信的。我们调试的时候,无法知道是否正确,就可以用STM32的cpu,给串口输出一些信息给PC,我们通过屏幕(实际上是终端串口软件),可以看到这些信息,从而知道当前程序的错误可能出现的位置。当然,也可以在PC的键盘敲打命令,让串口帮传递给STM32板子,来执行这些命令。
2、串口到底如何工作的?一般有两种方式:查询和中断。
1 (1)查询:串口程序不断地循环查询,看看当前有没有数据要它传送。如果有,就帮助传送(可以从PC到STM32板子,也可以从STM32板子到PC)。
2 (2)中断:平时串口只要打开中断即可。如果发现有一个中断来,则意味着要它帮助传
STM32教程
输数据——它就马上进行数据的传送。同样,可以从PC到STM32板子,也可以从STM32板子到PC。
3、如何通过编程,让串口工作在查询或中断方式下?由于现实项目中,一般采用中断方式来处理串口,为方便大家编程,我们在例程目录中,给出了中断和查询两种方式的代码,仅供参考。
OK ,明白以上三个问题后,让我们开始串口的学习吧!我们分几个步骤来学习串口。 步骤一从硬件开始学习。大家先打开芯达STM32开发板附带的原理图。找到串口部分。笔者把它截图如下。我们发现,串口模块的电路是这样的:STM32的CPU引脚,通过两个PA端口的引脚PA10和PA9,连接到一个SP3232芯片,或者MAX232芯片。然后再连接到DB9串口座上。由于232芯片可以允许走两路信号,因此,我们扩展了一个串口COM2,请注意,如无特别说明,我们都将使用COM1。
SP3232EEN芯片能帮助把数据信号转换成电脑232接口能识别的信号。其转换是自动进行的。因此,我们只需要把要发送的数据送给引脚PA9,然后再串口座的引脚3上去接收数据即可。反之,接收数据也是一样。这里您可能有个疑问,为啥使用PA9和PA10?
大家下载STM32的datasheet文档后,在GPIO的复用功能章节,即可找到原因:原来这两个引
STM32教程
脚是USART复用的,呵呵。另外,固件函数中的串口例子,使用的也是PA9和PA10。当然还有其他复用的GPIO引脚,比如PA2,PA3等。
步骤二初始化串口。
请您打开《STM32F103xxx参考手册》与《STM32固件库使用手册》。我们
的思路和之前一样,根据固件库使用手册中给出的步骤来配置串口。1、要声明一个结构:
GPIO_InitTypeDefGPIO_InitStructure;
这里顺便也声明了GPIO的结构。原因是:串口是需要使用IO口来进行发
送和接收的。2、设置该结构中的成员:串口的
结构成员设置如下:
USART_StructInit(&USART_InitStructure);
USART_HardwareFlowControl_None;
GPIO结构的成员设置如下:
GPIO_StructInit(&GPIO_InitStructure);
3、调用函数xxx_Init()来初始化外设(包括IO和USART):
由于GPIO的外设初始化已经放在成员设置后面,因此这里没有列出来。4、调用
xxx_Cmd(xxx,ENABLE);函数来使能外设。这里只需要使能USART即可。GPIO的固件中,没有使能
STM32教程
即可使用。
由于本文档使用的是中断方式来触发串口收发数据,因此,我们在使能串口之前,也把发送和接收的中断使能打开:
5、别忘了加上外设的时钟使能哈~
从下页的截图,可以看出,GPIOA和USART都在APB2上。因此我们调用的函数如下:
步骤三操作串口收发数据
芯达STM32的思路是:首先让STM32的CPU发送一些欢迎信息,从串口打印出来。然后接收中断,该中断来自键盘输入。只要键盘输入一个字符,即打印出该字符,从而验证串口编程是否成功。
固件库的函数如何让串口发送和接收数据呢?它给我们提供了两个函数:
USART_SendData();——省略函数参数
USART_ReceiveData();
STM32教程
先来看发送。我们的程序在初始化串口之后,马上就会打印欢迎信息。也就是从STM32的CPU发送信息,在电脑屏幕上显示出来,只要如下操作即可:/*===================USART打印欢迎信息
=======================*/
}很简单吧,呵呵,TxBuf1是一个发送缓存。我们事先
把数据放在这个数组里了:
这里要注意的是,当我们发送一个字符后,必须查看状态标志,这里是发送是否完成的标志:USART_FLAG_TC,如果发送完成了,则才可以发送下一个数据。函数USART_GetFlagStatus();就是用来做这个判断的。
下面开始另外一个操作:键盘输入什么字符,就得显示什么字符。我们的代码如下:
}
思路:先判断接收的状态标志USART_FLAG_RXNE,如果接收的寄存器非空,说明已经接收到键盘发送来的数据,于是就把这个数据从接收缓存中取出来,发送给电脑。这样电脑就可以看到刚才敲入的字符了。
STM32教程
USART_ReceiveData(USART1);这个函数是从接收缓存取出数据。我们在这个while
中,还加入了GPIO的函数:
这两个函数,SetBits,表示对GPIOC端口的第0个引脚置1。ResetBits,清零。由于芯达STM32开发板上,GPIOC端口上的第0引脚连着一个LED灯,所以,我们可以通过观察LED灯是否闪烁来判断串口是否正在发送。
串口的编程,写到这里,已经进入尾声。如果您对串口操作还有不明白的地方,请直接到我们的官方网站:ARM技术交流网,进行讨论。我们将会尽快给您做出答复。 附:
福州芯达工作室简介
福州芯达工作室成立于2009年9月,我们专注于嵌入式产品的研发与推广,目前
STM32教程
芯达产品涉及ARM9系列、STM32系列。
芯达团队成员均硕士研究生毕业,具有一定研发实力。我们的愿景在于把福州芯达打造成国内一流的嵌入式品牌。或许我们现在做的还不够,但是我们真的努力在做,希望通过我们的努力,能够在您学习和使用芯达产品的过程中带来或多或少的帮助。
这是芯达为了配合STM32开发板而推出的入门系列教程。如果您在看了我们的教程后,理清了思路,我们都会倍感欣慰!让我们一起学习,共同进步,在征服嵌入式领域的道路上风雨同行!
官方网站:官方淘宝:
…… 此处隐藏:1186字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




