网站源码在线查看,店面设计师哪里找,易企秀可以做网站吗,网站被入侵1.USART简介同步不常用#xff0c;只支持时钟输出#xff0c;不支持时钟输入#xff0c;并不支持两个USART之间进行同步通信。波特率发生器#xff1a;用来配置波特率#xff0c;是一个分频器硬件流控制#xff1a;可以防止数据处理过慢而导致的数据丢失的问题注意#…1.USART简介同步不常用只支持时钟输出不支持时钟输入并不支持两个USART之间进行同步通信。波特率发生器用来配置波特率是一个分频器硬件流控制可以防止数据处理过慢而导致的数据丢失的问题注意UASRT1在APB2总线上其它的都是在APB1总线上的设备2.USART内部结构框图注意TDR、RDR、发送移位寄存器、接收移位寄存器占用同一个地址统称为DR寄存器。当数据从发送数据寄存器移到发送移位寄存器时标志位TXE置1然后在发送器的控制下数据一位一位地输出到TX引脚接收数据时同理标志位为RXNE。硬件数据流控nRTS是输出脚请求发送nCTS是输入脚清除发送n表示低电平有效。TX和CTS为一对RX和RTS为一对。唤醒单元实现串口挂载多设备通过地址寻址来实现多设备发送器时钟USART1挂载在APB2是PCLK2的时钟一般为72M其它挂载在APB1是PCLK1的时钟一般为36M。3.USART基本结构简化4.细节1.数据帧1.字长设置2.停止位2.USART输入数据的策略了解以波特率的频率连续采样一帧数据每次都要保证采样位置在位的正中间3.波特率发生器5.实战代码1.部分函数的功能//基本初始化 void USART_DeInit(USART_TypeDef* USARTx); void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); void USART_StructInit(USART_InitTypeDef* USART_InitStruct); //配置同步时钟输出 void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct); void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct); //开启USART到DMA的触发通道 void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); //发送接收数据 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);//发送写DR寄存器 uint16_t USART_ReceiveData(USART_TypeDef* USARTx);//接收读DR寄存器 //与标志位相关 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);2.配置思路发送接收1.RCC开启时钟把GPIO和USART的时钟打开2.配置GPIO把TX配置成复用输出模式RX配置成输入模式3.配置USART波特率发生器、发送接收控制器、发送接收寄存器4.配置中断需要接收的情况下5.开启USART使能3.基本配置格式//USART是APB2上的设备 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //开启GPIO的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_InitStructure;//结构体定义 GPIO_InitStructure.GPIO_ModeGPIO_Mode_AF_PP;//复用推挽输出 GPIO_InitStructure.GPIO_PinGPIO_Pin_9;//IO口 GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz; GPIO_Init(GPIOA,GPIO_InitStructure); //初始化USART USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate9600;//波特率 USART_InitStructure.USART_HardwareFlowControlUSART_HardwareFlowControl_None;//硬件流控制 USART_InitStructure.USART_ModeUSART_Mode_Tx;//配置模式此处只是发送模式 USART_InitStructure.USART_ParityUSART_Parity_No;//校验位无校验 USART_InitStructure.USART_StopBitsUSART_StopBits_1;//停止位1位停止位 USART_InitStructure.USART_WordLengthUSART_WordLength_8b;//字长8位 USART_Init(USART1,USART_InitStructure); //开启USART USART_Cmd(USART1,ENABLE);4.在Keil中使用printf的方法1.需要include stdio.h头文件2.重定向fputc函数到串口printf每次执行打印操作都要用到fputc函数3.可以封装sprintf函数使打印操作更加方便//对sprintf函数进行封装 void Serial_Printf(char *format,...) { char String[100]; va_list arg;//参数列表变量 va_start(arg,format);//从format开始接收列表 vsprintf(String,format,arg); va_end(arg);//释放参数列表 Serial_SendString(String); }