一:串口知识分享
1.1串口知识
通用同步异步收发器(USART)是一种全双工串行数据交换接口,支持同步或异步通信。可灵活配置,以便于与多种外部设备进行全双工数据交换。
USART 接口发送与接收波特率可配置,也支持通过 DMA 进行连续通信。 USART 还支持多处理器通信、LIN 模式、同步模式、单线半双工通信、智能卡异步协议、 IrDA SIR ENDEC 功能、以及硬件流控制功能。
1.2 串口特性
支持全双工通信
支持单线半双工通信
波特率可配置,最高波特率可达 4Mbit/s
支持 8bit 或 9bit 数据帧
支持 1bit 或 2bit 停止位
支持硬件生成校验位及校验位检查
支持硬件流控: RTS、 CTS
支持 DMA 收发
支持多处理器通信:如果地址不匹配,则进入静默模式, 可通过空闲总线检测或地址标识唤醒
支持同步模式,允许用户在主模式下控制双向同步串行通信
支持智能卡异步协议,符合 ISO7816-3 标准
串行红外协议(IrDA SIR)编码与解码,提供正常与低功耗两种运行模式
支持 LIN 模式
支持多钟错误检测:数据溢出错误、帧错误、噪声错误、检验错误
支持多个中断请求:发送数据寄存器为空、 CTS 标志、发送完成、数据已接收、数据溢出、总线空闲、
检验错误、 LIN 模式断开帧检测、以及多缓冲区通信中的噪声标志/溢出错误/帧错误
1.3 硬件连接
需要将板载的PA9,PA10引脚利用跳线帽安装到调试器的串口1上面,这样我们就可以使用板载USB接口查看串口发出的数据了。
1.4软件控制流程
步骤1:串口时钟使能,GPIO时钟使能,使能串口时钟:
GPIO_AHBClkCmd(USARTx_GPIO_CLK);
USART_APBxClkCmd(USARTx_CLK);
步骤2:GPIO端口模式设置: GPIO_Configuration(); //此处注意使用的IO口是否正常,是否需要映射。
步骤3:串口参数初始化:USART_Init(); //初始化,波特率,停止位,校验位等信息
步骤4:开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
步骤5:使能串口: USART_Enable(USARTx);
步骤6:编写中断处理函数:UART1_IRQHandler();
这里将串口1映射到Printf函数中:配置信息如下: int fputc(int ch, FILE* f) { USART_Data_Send(USARTx, (uint8_t)ch); while (USART_Flag_Status_Get(USARTx, USART_FLAG_TXDE) == RESET) ; return (ch); }
主函数:
RCC_ClocksType RCC_ClocksStatus; /* System Clocks Configuration */ RCC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); RCC_Clocks_Frequencies_Value_Get(&RCC_ClocksStatus); /* USARTy and USARTz configuration ------------------------------------------------------*/ USART_InitStructure.BaudRate = 9600; USART_InitStructure.WordLength = USART_WL_8B; USART_InitStructure.StopBits = USART_STPB_1; USART_InitStructure.Parity = USART_PE_NO; USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; /* Configure USARTx */ USART_Initializes(USARTx, &USART_InitStructure); /* Enable the USARTx */ USART_Enable(USARTx); /* Output a message on Hyperterminal using printf function */ // printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r"); while (1) { printf("\n\r学习国产32单片机之路------------keyboard007\n\r"); SysTick_Delay_Ms(500); }
二:利用E32模块接收发送串口数据
2.1:E32模块模块资料:
该电路只需将模块的TXD 与 RXD 连接到 MCU的RXD和TXD即可。
E32模块是基于SX1278射频芯片的贴片型无线串口模块(TTL电平),透明传输方式,发射功率100MW,工作在410-441MHZ频段,采用LORA扩频技术。
SX1278支持LORA扩频技术,通讯距离远,抗干扰能力强的优势,同时有极强的保密性。模块具有数据加密和压缩功能,模块在空中传输的数据,具有随机性,通过严密的加解密算法,使得数据截获失去意义。而数据压缩功能有概率减小传输时间,减少受干扰的概率,提高可考性和传输效率。
模块的工作参数
硬件的连接图如下:
此处注意一下:将板载调试器的PA9,PA10的两根线断开,否则对串口传输会有影响。
然后利用自制的接收模块连接上电脑,查看一下接收到的数据。
接收模块图片如下: