STM32usart串口通信的使用

开发步骤

(1)使能串口时钟及 GPIO 端口时钟 前面说过 STM32F103ZET6 芯片具有 5 个串口,对应不同的引脚,串口 1 挂接 在 APB2 总线上,串口 2-串口 5 挂接在 APB1 总线上,根据自己所用串口使能总 线时钟和端口时钟。例如使用 USART1,其挂接在 APB2 总线上,并且 USART1 对 应 STM32F103ZET6 芯片管脚的 PA9 和 PA10,因此使能时钟函数如下: 1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能 GPIOA 时钟 2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能 USART1 时

(2)GPIO 端口模式设置,设置串口对应的引脚为复用功能 因为使用引脚的串口功能,所以在配置 GPIO 时要将设置为复用功能,这里 把串口的 Tx 引脚配置为复用推挽输出, Rx 引脚为浮空输入,数据完全由外部 输入决定。如下: 1. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX //串口输出 PA9 2. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 3. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出 4. GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化串口输入 IO * 5. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX //串口输入 PA10 6. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //模拟输入 7. GPIO_Init(GPIOA,&GPIO_InitStructure);

(3)初始化串口参数,包含波特率、字长、奇偶校验等参数 要使用串口功能,必须对串口通信相关参数初始化,其库函数如下: 1. void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); 想必不用说,大家也知道第一个参数是什么意思,它是用来选择串口。第二 个参数是一个结构体指针变量,结构体类型是 USART_InitTypeDef,其内包含了 串口初始化的成员变量。下面我们就来看下这个结构体: 1. typedef struct 2. { 3. uint32_t USART_BaudRate; //波特率 4. uint16_t USART_WordLength; //字长 5. uint16_t USART_StopBits; //停止位 6. uint16_t USART_Parity; //校验位 7. uint16_t USART_Mode; //USART 模式 8. uint16_t USART_HardwareFlowControl; //硬件流控制 9. } USART_InitTypeDef;

(4)使能串口 配置好串口后,我们还需要使能它,使能串口库函数如下: 1. void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)

(5)设置串口中断类型并使能 对串口中断类型和使能设置的函数如下: 1. void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalStat e NewState); 第一个参数用来选择串口,第二个参数用来选择串口中断类型,第三个参数 用来使能或者失能对应中断。由于串口中断类型比较多,所以使用哪种中断,我 们就需要对它进行配置。比如在接收到数据的时候(RXNE 读数据寄存器非空), 我们要产生中断,那么我们开启中断的方法是: USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断 又比如我们发送完数据时,要产生中断,可以配置如下: USART_ITConfig(USART1,USART_IT_TC, ENABLE)

(6)设置串口中断优先级,使能串口中断通道 在上一步我们已经使能了串口的接收中断,只要使用到中断,就必需对 NVIC 初始化,NVIC 初始化库函数是 NVIC_Init(),这个在前面讲解 STM32 中断时就已 经介绍过,不清楚的可以回过头看下

(7)编写串口中断服务函数 最后我们还需要编写一个串口中断服务函数,通过中断函数处理串口产生的 相关中断。串口中断服务函数名在 STM32F1 启动文件内就有,USART1 中断函数 名如下: USART1_IRQHandler 因为串口的中断类型有很多,所以进入中断后,我们需要在中断服务函数开 头处通过状态寄存器的值判断此次中断是哪种类型,然后做出相应的控制。库函 数中用来读取串口中断状态标志位的函数如下: 1. ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

软件编程

usart.h

usart.c

main.c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是关于STM32 USART发送和接收使用DMA的回答: DMA (Direct Memory Access)是一种在不占用CPU的情况下直接进行数据传输的技术。对于STM32USART模块,使用DMA可以大大减轻CPU的负担,提高数据传输效率。 首先,需要配置USART和DMA。可以使用STM32的CubeMX工具来快速生成初始化代码。在配置USART时,需要设置USART的波特率、数据位、停止位和校验位等参数。在配置DMA时,需要设置DMA的传输方向、数据长度、传输模式、优先级和中断等参数。 接下来,可以使用HAL库提供的函数来启动DMA传输。在发送数据时,可以使用函数HAL_UART_Transmit_DMA()启动DMA传输,该函数会将数据存储在指定的缓冲区中,并将缓冲区的地址传递给DMA进行传输。在接收数据时,可以使用函数HAL_UART_Receive_DMA()启动DMA传输,该函数会将接收到的数据存储在指定的缓冲区中,并将缓冲区的地址传递给DMA进行传输。 在DMA传输完成后,可以使用HAL库提供的回调函数来进行处理。对于发送完成,可以使用函数HAL_UART_TxCpltCallback();对于接收完成,可以使用函数HAL_UART_RxCpltCallback()。 需要注意的是,在使用DMA进行数据传输时,需要确保缓冲区的大小足够大,以便存储需要传输的数据。 希望这个回答能够帮助你了解STM32 USART发送和接收使用DMA的相关知识。如果你有任何其他问题,可以随时提出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值