STM32入门学习之USART(STM32F030F4P6基于CooCox IDE)

来源:互联网 发布:淘宝怎么加陌生人好友 编辑:程序博客网 时间:2024/05/24 07:40
#include "stm32f0xx.h"#include "stm32_lib/inc/stm32f0xx_rcc.h"#include "stm32_lib/inc/stm32f0xx_gpio.h"#include "stm32_lib/inc/stm32f0xx_usart.h"int main(void){//1、使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//特别注意:因为串口有使用GPIO,所以对应GPIO的时钟也要使能RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//2、选择引脚//TX有PA2和PA9可选,RX有PA3和PA10可选//GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);//GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//为什么是AF1,而不是AF0呢?见下图,数据手册才是准确的GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);//3、引脚设置GPIO_InitTypeDef PORT_UART1_TX;//定义TX脚,PORT_UART1_TX是自定义名称,可以任意PORT_UART1_TX.GPIO_Pin=GPIO_Pin_9;//此参数根据上面选择的引脚来定PORT_UART1_TX.GPIO_Speed=GPIO_Speed_10MHz;PORT_UART1_TX.GPIO_Mode=GPIO_Mode_AF;PORT_UART1_TX.GPIO_PuPd=GPIO_PuPd_NOPULL;//IO初始化//第一个参数是系统的GPIOA、GPIOB、GPIOC等//第二个参数是&+上面自定义的名称PORT_UART1_TXGPIO_Init(GPIOA,&PORT_UART1_TX);GPIO_InitTypeDef PORT_UART1_RX;//定义RX脚PORT_UART1_RX.GPIO_Pin=GPIO_Pin_10;//此参数根据上面选择的引脚来定PORT_UART1_RX.GPIO_Speed=GPIO_Speed_10MHz;PORT_UART1_RX.GPIO_Mode=GPIO_Mode_AF;PORT_UART1_RX.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&PORT_UART1_RX);//4、串口参数配置USART_InitTypeDef MyUsart1;//这个MyUsart1是我自定义的,可以任意定义如XYZ123MyUsart1.USART_BaudRate=115200;//设置波特率MyUsart1.USART_WordLength=USART_WordLength_8b;//设置数据长度MyUsart1.USART_Parity=USART_Parity_No;//设置奇偶校验MyUsart1.USART_StopBits=USART_StopBits_1;//设置停止位MyUsart1.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置流控制MyUsart1.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//设置模式//初始化//第一个参数是系统的USART1、USART2、USART3等//第二个参数就是&+上面自定义的量MyUsart1USART_Init(USART1,&MyUsart1);//5、使能USART_Cmd(USART1,ENABLE);//6、接收和发送,通过查询标志位while(1){while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=1);//等待接收USART_ClearFlag(USART1,USART_FLAG_RXNE);//清楚接收完成标志位USART_SendData(USART1,USART_ReceiveData(USART1));//接收什么,发送什么while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=1);//等待发送完成USART_ClearFlag(USART1,USART_FLAG_TXE);//清楚发送完成标志位}}


0 0