你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030 Nucleo64开发板测评之:串口通信

[复制链接]
黑夜之狼 发布时间:2016-11-21 14:57
趁着今天不是很忙,继续鼓捣下STM32F030 Nucleo64这块板子,这次我们来玩玩串口通信。咱们当码农电工的,往往在做项目调试代码的时候,想查看一些信息,但是呢,项目不需要LCD等显示模块,除了用软件仿真来查看外,串口也是一个经济实惠快捷的选择。

串口作为单片机和外部一个比较重要的通信接口,同时也是咱们码农调试代码的好工具,其重要性不言而喻了。STM32F030R8这颗芯片自带2路串口,咱们这次玩USART2,因为nucelo64这块板子板载虚拟串口,就是USART2


串口的配置可以总结为以下几点:
(1)串口和GPIO的时钟使能
(2)串口复位
(3)GPIO模式设置
(4)串口参数初始化
(5)打开中断(也可以用查询方式,这里不讲)
(6)使能串口
(7)既然开了中断,那么就要写串口中断服务函数

下面,我们开始简单介绍下完成上面步骤的几个库函数,可以打开stm32f0xx_usart.c和stm32f0xx_usart.h这两个文件查看。

(1)使能对应外设时钟
         相信这一点经过上一贴的描述,大家应该都可以完成,那么下面就直接贴代码了
  1. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //使能USART2时钟
  2.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
复制代码

(2)串口复位
        在外设初始化的时候,可以考虑让外设重新复位,每一个相关的寄存器恢复到默认值,其实我个人做项目的时候也没用到复位,也没发现啥问题,各位也可以尝试下
  1. USART_DeInit(USART2);  //复位串口2
复制代码

(3)GPIO模式配置
        由于USART2是占用了PA2和PA3这两个IO,需要启动GPIO复用功能,采用GPIO_PinAFConfig这个函数来设置,可以参考STM32F030R8数据手册,如下图所示:
GPIO复用功能表.png

具体代码如下:
  1. /*
  2.         USART2 GPIO Configuration
  3.         PA2     ------> USART2_TX
  4.         PA3     ------> USART2_RX
  5.     */
  6.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);
  7.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);
  8.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //PA.2 PA.3
  9.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  10.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  11.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  12.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
  13.     GPIO_Init(GPIOA, &GPIO_InitStructure);
复制代码

(4)串口参数初始化
        我们可以打开库函数stm32f0xx_usart.c和stm32f0xx_usart.h这两个文件,串口的初始化是由void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)这个函数来实现的。
        这个函数的第一个入口参数是指定初始化的串口标号,这里选择 USART2。
        第二个入口参数是一个 USART_InitTypeDef 类型的结构体指针,这个结构体指针的成员变量用来设置串口的一些参数。我们可以打开库函数看看:
USART_InitTypeDef结构体成员.png
实现方式如下:
  1. //USART 初始化设置
  2.         USART_InitStructure.USART_BaudRate = bound;                                     //设置波特率
  3.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;                     //字长为8位数据格式
  4.         USART_InitStructure.USART_StopBits = USART_StopBits_1;                          //一个停止位
  5.         USART_InitStructure.USART_Parity = USART_Parity_No;                             //无奇偶校验位
  6.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
  7.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                        //收发模式
  8.     USART_Init(USART2, &USART_InitStructure);              
复制代码
从上面的初始化格式可以看出初始化需要设置的参数为:波特率,字长,停止位,奇偶校验位,硬件数据流控制,模式(收,发) 。

(5)打开中断
         使能串口中断的函数是:
  1. USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//使能串口2接收中断   
复制代码
       千万不要忘记了还要配置中断通道、优先级等参数:
  1. NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;         
  2.         NVIC_InitStructure.NVIC_IRQChannelPriority = 3;
  3.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  4.         NVIC_Init(&NVIC_InitStructure);
复制代码

(6)使能串口
         这个最简单,一个库函数搞掂~~~
  1. USART_Cmd(USART2, ENABLE);                    //使能串口2
复制代码

(7)编写中断服务函数
        既然你打开了中断,那么中断响应之后,肯定得干些事情,这时候,就轮到中断服务函数出场了~~~
        中断服务函数的名字不能随便定义,我们可以打开系统启动文件startup_stm32f030.s文件,在里面可以查看到这颗芯片所有外设的中断服务函数的名字
中断服务函数的函数命名.png    
      本次例程要实现的功能是串口的接收和发送,中断服务函数代码如下:
  1. void USART2_IRQHandler(void)
  2. {
  3.         u8 ch;
  4.        
  5.         if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  6.         {        
  7.         ch = USART_ReceiveData(USART2);
  8.                   printf("%c", ch);    //将接受到的数据直接返回打印
  9.         }
  10.          
  11. }
复制代码
从上面的函数可以看到,这里用到了printf函数,具体的配置方法可以看看我之前发过的帖子,这里就不重复介绍了

贴上工程代码:
STM32F030_USART2.rar (1.75 MB, 下载次数: 121)

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 2 评论8 发布时间:2016-11-21 14:57

举报

8个回答
anobodykey 回答时间:2016-11-21 16:18:23
感谢楼主分享
xhzheng 回答时间:2016-11-21 17:15:44
感谢楼主分享
zengyi703-16313 回答时间:2016-11-22 08:17:41
谢楼主分享
haichen 回答时间:2017-2-10 13:09:49
你好,我用这个串口程序,发送数据可以,但是接收数据出现问题,怎么回事啊
moyanming2013 回答时间:2017-2-10 13:44:31
感谢楼主分享
moyanming2013 回答时间:2017-2-10 13:45:01
学习,总结的好
aa随风而来 回答时间:2017-8-23 09:53:14
看了之后大有启发,谢谢楼主了
fansanderen 回答时间:2018-5-11 16:53:30
感谢楼主分享

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版