完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
初始化 GPIO_ConfAndInit(GPIOA,GPIO_Pin_9,GPIO_Mode_AF_PP,GPIO_Speed_50MHz); GPIO_ConfAndInit(GPIOA,GPIO_Pin_10,GPIO_Mode_IN_FLOATING,GPIO_Speed_50MHz); USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; 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(USART1,&USART_InitStructure); USART_Cmd(USART1,ENABLE); 步骤归纳: 初始化相关的Pin -> 使能外设时钟 -> 定义结构体变量 -> 结构体成员赋值 -> 初始化外设 -> 使能外设. 注意GPIO初始化后可以直接使用,类似串口这样的外设需要使用使能函数去开启. 上述代码中以USART1为例子,PA9是USART的TX端,PA10是USART的RX端.pin的模式选择很好理解,PA9因为不是做普通的IO使用,而是做USART的一部分功能,由USART去控制它,并且能够方便的使用高低电平,所以我们需要选择功能复用的推挽输出模式.输入同理. 参数整定 USART_BaudRate(波特率) 波特率是用来描述传输码元的速度的,也就是信号的调制速率,转换成比特率有固定的公式。在STM32中9600的波特率计算出来的比特率就是9600bps,也就是一秒钟传输9600个bit。常用的波特率有4800、9600、115200等。在异步串口中,只有两个相同波特率的设备才能进行正常通讯 。 USART_WordLength(字长) 数据长度,表示一次传输的实际数据长度,8b和9b可选,一般选8b。 USART_StopBits(停止位) 起始位是一帧数据起始的标志,停止位是一帧数据结束的标志,起始位固定1位。停止位0.5,1,1.5,2可选。一般设置为1. USART_Parity(奇偶校验位) 奇偶校验是一种简单验证数据传输正确性的方式。 HardwareFlowControl(硬件流控制) 这个功能是用在RS232上,用于控制数据流收发,防止数据丢失用的。基本用不到。 USART_Mode(模式) RX和TX两种模式,可以只选其一,很多情况下两个都开启。 发送和接收函数 在STM32F10x系列中,官方固件库给出的串口输入输出函数有如下: //发送 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); //接收 uint16_t USART_ReceiveData(USART_TypeDef* USARTx); 从这两个函数的声明可以看出,官方的函数只提供单个字符的输入输出。具体实现查看“stm32f10x_usart.c”这个文件。 为了保证输入输出的有效性,我们可以通过USART_GetFlagStatus这个函数判断串口输入输出的状态。在发送完成和读取完毕的状态下才会退出。对于多字节的输出(例如连续输出“HELLO World”),循环输出单个字符的方式,下面给出了三个实现上述的自定义函数。 void Usart_SendByte(USART_TypeDef * pUSARTx,uint16_t ch) { USART_SendData(pUSARTx,ch); while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE)==RESET); } void Usart_SendString(USART_TypeDef *pUSARTx,char *str) { unsigned int k=0; do { Usart_SendByte(pUSARTx,*(str+k)); k++; }while(*(str+k)!=' |