STM32中USART的使用方法

USART作为一种标准接口在应用中十分常见。本文着重分析其作为UART的配置和应用方法。

1STM32固件库使用外围设备的主要思路

STM32中,外围设备的配置思路比较固定。首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟;最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟。

其次是配置GPIOGPIO的各种属性由硬件手册的AFIO一章详细规定,较为简单。

接着相关设备需要如果需要使用中断功能,必须先配置中断优先级,后文详述。

然后是配置外围设备的相关属性,视具体设备而定,如果设备需要使用中断方式,必须使能相应设备的中断,之后需要使能相关设备。

最后如果设备使用了中断功能,则还需要填写相应的中断服务程序,在服务程序中进行相应操作。

2UART的配置步骤

2.1、打开时钟

由于UARTTXRXAFIO都挂在APB2

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
stm32串口1和串口3数据互通,经测试同时发256字节不丢包 void usart3_init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOBʱÖÓ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //´®¿Ú3ʱÖÓʹÄÜ USART_DeInit(USART3); //¸´Î»´®¿Ú3 //USART3_TX PB10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö GPIO_Init(GPIOB, &GPIO;_InitStructure); //³õʼ»¯PB10 //USART3_RX PB11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë GPIO_Init(GPIOB, &GPIO;_InitStructure); //³õʼ»¯PB11 USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÒ»°ãÉèÖÃΪ9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ 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(USART3, &USART;_InitStructure); //³õʼ»¯´®¿Ú 3 USART_Cmd(USART3, ENABLE); //ʹÄÜ´®¿Ú //ʹÄܽÓÊÕÖÐ¶Ï USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿ªÆôÖÐ¶Ï //ÉèÖÃÖжÏÓÅÏȼ¶ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//ÇÀÕ¼ÓÅÏȼ¶3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×ÓÓÅÏȼ¶3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ NVIC_Init(&NVIC;_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷ TIM4_Int_Init(1000-1,7200-1); //10msÖÐ¶Ï USART3_RX_STA=0; //ÇåÁã TIM_Cmd(TIM4,DISABLE); //¹Ø±Õ¶¨Ê±Æ÷7 } //´®¿Ú3,printf º¯Êý //È·±£Ò»´Î·¢ËÍÊý¾Ý²»³¬¹ýUSART3_MAX_SEND_LEN×Ö½Ú void u3_printf(char* fmt,...) { u16 i,j; va_list ap; va_start(ap,fmt); vsprintf((char*)USART3_TX_BUF,fmt,ap); va_end(ap); i=strlen((const char*)USART3_TX_BUF); //´Ë´Î·¢ËÍÊý¾ÝµÄ³¤¶È for(j=0;j<i;j++) //Ñ­»··¢ËÍÊý¾Ý { while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï USART_SendData(USART3,USART3_TX_BUF[j]); } }
### 回答1: STM32F103 USART使用DMA接收发送的框图如下: ![STM32F103的USART使用DMA接收发送框图](https://i.imgur.com/rsldyhT.png) 首先,框图USART模块用来实现与外部设备进行串行通信。USART模块包括了发送器和接收器两个功能部分。发送器负责将数据从处理器发送到外部设备,接收器负责将外部设备发送的数据接收到处理器。 在USART模块的发送/接收方向,连接有DMA控制器。DMA(直接存储器访问)是一种独立于处理器的数据传输方式,它通过直接从外部设备读写数据,而不需要处理器的干预。DMA控制器有多个通道,用于连接不同的外设。在本框图,DMA通道与USART模块相连。 对于USART的发送,当处理器要发送数据时,首先将待发送数据写入USART模块的发送寄存器。然后,触发DMA控制器,将发送寄存器的数据送到DMA通道,最后DMA将数据传输到USART外设,并且把发送完的数据长度传送到处理器,以便处理器知道数据是否发送完成。 对于USART的接收,当外部设备发送数据到USART接收寄存器时,触发USART接收断,通知处理器接收到了数据。然后,处理器触发DMA控制器,将接收数据的DMA通道启动,将数据从USART外设传输到DMA寄存器。接着,处理器可以通过查询DMA寄存器,获取接收到的数据。 通过使用DMA接收和发送数据,可以减轻处理器的负担,提高系统的运行效率。 ### 回答2: stm32f103是意法半导体推出的一款32位单片机系列产品,其USART是一种通用异步收发传输器。使用DMA(直接存储器访问)来实现USART接收和发送功能,可以提高数据传输的效率。 以下是STM32F103 USART使用DMA接收发送的框图解读: 1. USART 模块:USART模块是STM32F103系列的一种通信模块,用于数据的异步传输。它包含了需要将数据发送到外部设备或从外部设备接收数据的各种寄存器和控制逻辑。 2. DMA控制器:DMA控制器是STM32F103系列的一个重要模块,用于在外设和内存之间进行高速数据传输,减少CPU的负担。 3. 数据内存:数据内存用于存储接收到的数据或待发送的数据。 4. NVIC:NVIC是断控制器,用于管理各种断源和断优先级。 5. DMA传输请求:当USART接收或发送缓冲区准备好数据时,会产生DMA传输请求,将数据传输到或从数据内存。 6. DMA配置寄存器:DMA配置寄存器用于配置DMA通道的参数,如数据传输方向、数据长度等。 7. DMA传输完成断:当DMA传输完成时,会产生断请求,引起断处理程序的执行。 8. 断处理程序:断处理程序负责处理DMA传输完成断请求,可以在断处理程序对接收到的数据进行处理或触发其他操作。 通过使用DMA来实现USART接收和发送,可以实现数据的高效传输和处理。接收时,当USART接收缓冲器准备好数据后,它会产生DMA传输请求,将数据传输到数据内存。当数据传输完成时,DMA会产生断请求,触发断处理程序对接收到的数据进行处理。发送时,将待发送的数据写入数据内存,并设置DMA传输方向和数据长度等参数。DMA会自动从数据内存读取数据并将其传输到USART发送缓冲器进行发送。当数据传输完成时,同样会产生DMA传输完成断请求。 总之,使用DMA来处理USART的接收和发送,可以提高数据传输效率,减轻CPU负担,从而更好地满足系统对数据通信的需求。 ### 回答3: STM32F103是一款32位的ARM Cortex-M3系列微控制器,具有多个通用同步/异步收发器(USART)接口,用于与外部设备进行数据通信。这款芯片还支持使用DMA(直接内存访问)功能来实现USART的数据传输。 在使用DMA进行数据接收和发送时,首先需要设置USART的相应寄存器(例如,配置波特率、数据位数和停止位等参数),然后设置DMA控制器的寄存器,以使其与特定的USART通道相连接。 接下来,通过配置DMA通道的源和目的地址,将USART的RDR(接收数据寄存器)作为DMA的源地址,将USART的TDR(发送数据寄存器)作为DMA的目的地址。然后,设置DMA通道的传输数量,以确定需要传输的数据的大小。 在接收数据时,一旦USART接收到数据,并将其存储在RDR寄存器,DMA控制器就会自动将该数据从RDR寄存器传输到目的地址。这样,通过DMA传输数据可以减轻主CPU的负担,提高数据传输效率。 在发送数据时,将要发送的数据存储在TDR寄存器,并通过DMA控制器将其传输到目的地址。这样,通过DMA发送数据可以使主CPU能够在数据传输过程执行其他任务,提高整个系统的性能。 总结起来,使用DMA进行USART数据接收和发送时,需要配置USART和DMA控制器的寄存器,并设置源和目的地址以及传输数量。通过这种方式,可以实现高效的数据传输,减轻主CPU的负担,提高系统的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值