本帖最后由 黑夜之狼 于 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)
|