打印
[STM32F0]

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

[复制链接]
1244|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 黑夜之狼 于 2016-11-9 00:08 编辑

继上一个帖子STM32F030 Nucleo64开发板测评之:点亮你的LED介绍了GPIO和嘀嗒定时器的配置后,这次咱们来玩玩串口。串口作为单片机和外部一个比较重要的通信接口,同时也是咱们码农调试代码的好工具,其重要性不言而喻了。STM32F030R8这颗芯片自带2路串口,咱们这次玩USART2,因为nucelo64这块板子板载虚拟串口,就是USART2。

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

下面,我们开始简单介绍下完成上面步骤的几个库函数,可以打开stm32f0xx_usart.c和stm32f0xx_usart.h这两个文件查看。
前面两点相信大家都可以很轻松地完成,我们看第3步,GPIO模式设置,因为串口是接到了PA2和PA3,需要使能GPIO的复用功能,采用GPIO_PinAFConfig这个函数来设置,可以参考STM32F030R8数据手册,如下图所示:


下面是具体代码:
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //PA.2 PA.3
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
    GPIO_Init(GPIOA, &GPIO_InitStructure);
完成了GPIO的复用配置后,再来配置串口的参数,可以打开库函数stm32f0xx_usart.h这个文件,用于配置串口的关键参数都被写成一个结构体的形式,如下代码所示:

一般的实现格式如下:
//USART 初始化设置
        USART_InitStructure.USART_BaudRate = bound;                                     //设置波特率
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                     //字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                          //一个停止位
        USART_InitStructure.USART_Parity = USART_Parity_No;                             //无奇偶校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                        //收发模式
    USART_Init(USART2, &USART_InitStructure);                                       //初始化串口
从上面的初始化格式可以看出初始化需要设置的参数为:波特率,字长,停止位,奇偶校验位,硬件数据流控制,模式(收,发) 。

我们继续往下看,完成了串口参数的设置,那就需要打开串口的中断和使能串口,还要配置中断优先级,具体代码如下:
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//使能串口2接收中断   
    USART_Cmd(USART2, ENABLE);                    //使能串口
    USART_ClearFlag(USART2, USART_FLAG_TC);
   
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;         
        NVIC_InitStructure.NVIC_IRQChannelPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
到了这里我们就完成了串口的接收和发送功能,本次例程还调用了printf函数,具体配置方法可以参考我之前发过的帖子STM32L031测评之:玩玩串口,这里就不重复介绍了

附上工程代码: STM32F030_USART2.rar (1.75 MB)
沙发
mmuuss586| | 2016-11-9 11:00 | 只看该作者
谢谢分享;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:代理中颖MCU,可技术交流,欢迎私信骚扰

18

主题

1176

帖子

11

粉丝