2-STM32串口通信实验 PPT课件
- 格式:ppt
- 大小:2.56 MB
- 文档页数:39
实验要求∙使用开发板上的串口向PC发送信息∙PC通过串口向开发板发送数据,CPU在接收到后,确认信息,并通过串口返回数据例如:开发板先发送一个字符‘c’,然后PC发送一个字符‘a’,开发板接收到后,再发送一个字符‘b’[编辑] 实验目的∙学习和掌握STM32的USART模块的工作原理和使用方法∙学习和掌握USART固件库的使用∙掌握串口中断的使用方法[编辑] 实验分析硬件分析:USART的工作原理软件分析:USART固件库USART实例[编辑] 开发板原理图设计MAX3232与主芯片的连接[编辑] 硬件知识点详见STM32F10XXX英文版参考手册RM0008-Reference Manual[编辑] USART通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。
USART利用小数波特率发生器提供宽范围的波特率选择。
它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。
它还允许多处理器通信。
使用多缓冲器配置的DMA方式,可以实现高速数据通信。
(表) USART模式支持[编辑] USART内部结构[编辑] 引脚定义任何USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出(TX)。
∙RX:接收数据输入。
通过过采样技术来区别数据和噪音,从而恢复数据。
∙TX:发送数据输出。
当发送器被禁止时,输出引脚恢复到它的I/O端口配置。
当发送器被激活,并且不发送数据时,TX引脚处于高电平。
在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。
在同步模式中需要下列引脚:∙CK:发送器时钟输出。
此引脚输出用于同步传输的时钟, (在起始位和停止位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。
数据可以在RX上同步被接收。
stm32串口无线传输设计课件
针对STM32串口无线传输设计的课件,我们可以从以下几个方
面展开讨论:
1. 介绍STM32单片机及其串口通信功能,课件可以首先介绍STM32单片机的基本特性和硬件结构,以及其强大的串口通信功能。
可以讲解STM32的串口通信模块,如USART、UART等,以及它们在
嵌入式系统中的应用。
2. 介绍无线传输技术,课件可以对无线传输技术进行介绍,包
括常见的无线通信标准和协议,如Wi-Fi、蓝牙(Bluetooth)、Zigbee等,以及它们的特点、应用场景和优缺点。
3. STM32与无线模块的接口设计,课件可以详细介绍如何在STM32单片机和无线模块之间建立通信连接,包括硬件接口设计和
软件通信协议的制定。
可以讲解如何选择合适的无线模块,以及如
何进行串口通信的配置和数据传输。
4. 实际应用案例分析,课件可以通过实际的应用案例来展示STM32串口无线传输设计的具体实现,例如基于STM32的无线传感
器网络、远程控制系统等,以及相关的设计思路、技术难点和解决方案。
5. 实验操作指导,课件可以提供相应的实验操作指导,包括硬件连接示意图、软件编程实例等,帮助学生更好地理解和掌握
STM32串口无线传输设计的实际操作技能。
通过以上多个方面的内容,可以使课件内容更加全面和丰富,有助于学生全面理解STM32串口无线传输设计的相关知识和技术。
STM32串口通信一、串口1.串口概述串口是单片机中最常用也是最简单的一种通信方式通信:两个或两个以上的设备进行数据交换串口是用于两个设备之间的异步全双工通信异步——》两个设备不需要共时钟全双工——》两个设备之间服务于数据交换的“线”有两根Tx:数据发送端,用于发送数据Rx:数据接收端,用于接收数据在使用串口进行通信时,要求通信双方必须在“同频道” “同频道” =》相同的通信协议,同时双方需要共地,也就是GND相连串口(USART)约定:通信时数据必须以“帧”的形式传递串口的一帧数据包括:起始位 + 数据位 + 校验位 + 停止位其中:1)起始位:固定是1个周期的低电平信号2)数据位:可由通信双方自行约定是 5 ~ 9 bits3)校验位:串口采用的是奇偶校验,可由通信双方自行约定4)停止位:可选的 0.5 ~ 2 个周期的高电平同时,为了同步通信双发的收发速度,还需要约定每秒钟传输的数据帧的数量,称为波特率,典型波特率有9600 115200 57600 ……2.STM32F4xx 串口控制器单片机中通常会集成有串口的控制器,用户通常只需要通过软件配置串口控制器就可以利用串口进行通信了!!SR:状态寄存器,每个比特位标志了串口控制器中不同的状态变化RXNE:接收数据寄存器非空标志1表示RDR寄存器中有数据,可以读取,0表示RDR寄存器中没有数据TXE:发送数据寄存器为空标志1表示TDR寄存器中没有数据,可以发送,0表示TDR寄存器中有数据不能发送(覆盖上一次发送的数据)3.STM32F4xx 中的串口实现以STM32F4xx USART1(串口1)与 PC通信为例串口转USB原理图串口原理图也就是说,当UART1的跳线帽接1-3 和2-4时,STM32的USART1 与 PC机就可以通过USB线通信(必须烧写或做调试串口)配置USART1作为调试串口与PC通信1)配置Rx和Tx引脚STM32中串口的Tx和Rx是由GPIO复用功能而来PA9 –>USART1_TxPA10 –> USART1_RXGPIO_InitTypeDef GPIO_InitStruct;/* 配置GPIO引脚复用为Rx Tx */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP IOA,ENABLE); //使能GPIOA组时钟GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//复用功能模式GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //PA9 -> USART1_TxGPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//PA10-> USART1_Rx2)配置串口初始化/* 配置USART1 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能USART1的时钟(USART1 在APB2总线上)USART_ART_BaudRate = 9600; //指定波特率USART_ART_WordLength=USART_WordLength_8b; //指定数据位长度(通常是8bits) USART_ART_Parity = USART_Parity_No; //指定校验方式(通常不校验)USART_ART_StopBits = USART_StopBits_1; //指定停止位(通常是1个停止)USART_ART_Mode = USART_Mode_Tx|USART_Mode_Rx; //指定收发模式USART_ART_HardwareFlowContr ol = USART_HardwareFlowControl_None;//指定硬件控制流(通常不要)USART_Init(USART1,&USART_InitStruct);/* 开启串口,就可以开始通信 */USART_Cmd(USART1,ENABLE);3)串口收发函数//通过USART1发送1个字节void usart1_send_byte(char data)//USART_GetFlagStatus 用来获取串口SR寄存器中的指定标志位//获取TXE标志,判断其是否被设置(SET)while(USART_GetFlagStatus(USART1,USART_F LAG_TXE) != SET);//USART_SendData 用来通过指定串口发送数据USART_SendData(USART1,data);}char usart1_recv_byte(void){char ch = 0;while(USART_GetFlagStatus(USART1,USART_F LAG_RXNE) != SET);ch = USART_ReceiveData(USART1);return ch;}测试代码:char str[] = "HELLO";int i = 0;led_init();uart1_init();/* Infinite loop */while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_9);Delay(1000);GPIO_SetBits(GPIOF,GPIO_Pin_9);Delay(1000);for(i=0;i<7;i++){usart1_send_byte(str[i]);}}由于USART1的跳线帽接1-3和2-4,也就是通过USART1发送的数据经由USB线发送给了PC机此时,在PC上运行串口调试助手,则可以接收这些数据4)串口接收中断中断是指:当某件紧急的事件产生后,会打断CPU的正常执行顺序,转去执行中断处理程序,当中断处理程序执行完后,又回到原来被打断的位置继续执行的过程,被称为中断在串口应用中,我们不知道对方什么时候会发数据过来所以接收函数,并不适用 =》可能导致程序一直阻塞在while因此,我们需要借助中断来实现串口的数据接收串口中断配置:/* 配置串口1的接收中断*/ USART_ITConfig(USART1,USART_IT_RXNE,ENABL E);//USART_IT_RXNE接收数据寄存器不为空时产生中断配置了中断后,必须要配置 NVIC(中断控制器)/* 配置NVIC中断控制器 */NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; //指定中断通道 xxx_IRQnNVIC_InitStruct.NVIC_IRQChannelPreemption Priority = 2;//抢占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriorit y = 2;//子优先级NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);上述配置完成后,一旦对法发送数据到STM32就会触发串口1的中断此时还需要一个串口1的中断处理函数char ch = 0;void USART1_IRQHandler(void){//判断是由RXNE接收数据寄存器非空产生的中断if(USART_GetITStatus(USART1,USART_IT_RXN E) == SET) {ch = USART_ReceiveData(USART1); //接收1个字节的数据USART_ClearITPendingBit(USART1,USART_IT_ RXNE);//清除中断标志}}。