0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32请问串口要发送数据“1”该怎么赋值给USART->DR寄存器?

工程师邓生 来源:未知 作者:刘芹 2023-10-26 11:30 次阅读

STM32请问串口要发送数据“1”该怎么赋值给USART->DR寄存器

首先,我们需要了解一下STM32的串口通信模块。

STM32的串口通信模块有三个,分别是USART(通用同步异步收发器)、USART1、USART2。USART是通用串行同步/异步收发器,除TX和RX引脚外,还包含了同步引脚SCLK和从机选择引脚NSS,可以用于SPI通信。

今天,我们主要介绍的是USART。USART支持全双工收发,可以实现异步通信和同步通信。

在STM32的串口通信中,发送数据可以通过往USART->DR寄存器中写入数据来实现。接下来我们来详细介绍一下USART->DR寄存器。

USART->DR是USART数据寄存器,它是一个16位的寄存器,用于发送和接收数据。在发送数据时,将要发送的数据写入USART->DR寄存器即可。在接收数据时,USART->DR寄存器是只读的,需要通过读取USART的状态寄存器SR来获取接收到的数据。

接下来,本文将详细介绍如何通过USART->DR寄存器发送数据“1”。

1. 首先,要开启USART的发送功能,可以通过设置USART的控制寄存器USART_CR1实现。在控制寄存器中,有一个叫做USART_CR1.TE的位值表示要不要启用发送功能,使能该位可以使USART启动发送数据的功能。

2. 设置波特率。波特率是串口通信的重要参数,用于定义串口数据传输速率。波特率设置可以通过设置USART的控制寄存器USART_CR1中的USART_CR1.BRR位进行,该位表示波特率的预分频值。

3. 准备发送的数据。在本例中,需要发送字符“1”,字符在计算机中是以ASCII码的形式来表示的。因此,我们需要将字符“1”的ASCII码赋值给USART->DR寄存器。

4. 判断数据是否发送成功。可以通过判断USART_SR寄存器中的TXE(传输寄存器空标志位)和TC(发送完成标志位)位值来判断发送是否成功。当TXE为1时,表示USART->DR寄存器已经空了,可以继续向其中写入数据。当TC为1时,表示USART已经发送完毕最后一个数据,可以进行下一步操作。

5. 清除标志位。在发送完数据之后,需要清除USART_SR寄存器中的TC标志位,以便下一次使用USART进行数据发送。

以上就是发送数据“1”的详细过程。在实际应用中,为了使串口通信更加可靠,需要对发送的数据进行校验和处理。比如,在发送的数据前面加上一个起始位,以及在数据末尾添加一个校验位等等。当接收方收到数据后,需要对数据进行校验,确保数据的准确性。

总之,STM32的串口通信功能强大,可以实现多种通信方式。在数据的发送和接收过程中,需要注意一些细节问题,以保证数据的正确传输。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119979
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354696
  • 异步收发器
    +关注

    关注

    0

    文章

    36

    浏览量

    10835
  • USART串口
    +关注

    关注

    0

    文章

    32

    浏览量

    6805
收藏 人收藏

    评论

    相关推荐

    寄存器分为基本寄存器和什么两种

    ,它们用于存储指令、数据和地址等信息。基本寄存器的容量通常较小,但访问速度非常快,因为它们与CPU的执行单元紧密相连。 基本寄存器的分类 基本寄存器可以分为以下几类: (
    的头像 发表于 07-12 10:31 1099次阅读

    做lora通讯用到usart,配置时遇到的usart奇偶校验问题求解

    今天做lora通讯,用到usart,配置时发现usart奇偶校验困惑。假如CR1-&;gt;M、CR1-&;
    发表于 05-20 08:30

    使用STM8中的UART1,debug下发现UART1-&;gt;DR寄存器里面没有数据是哪里的问题?

    大家好,我想问一下,STM8中的UART1,在使用过程中遇到这样的问题,配置好了,再循环里不断发送字符,debug下发现UART1-&;gt;
    发表于 05-13 07:56

    调用ad7193芯片单次采样函数前后,读取其配置寄存器值不正确是什么原因?

    寄存器对应增益放大的值不对。 执行完单次采样后,读配置寄存器值,增益位是正确的。 在单次采样函数调用前,读配置寄存器值,数就不正确了。 while(1) { if(flag_
    发表于 05-10 06:17

    STM32串口DMA通讯接收不到数据的原因?

    { Clear=USART2-&;gt;SR;//读SR寄存器 Clear=USART2-&;gt;
    发表于 05-09 06:40

    stm8l151的usartDR寄存器无法写入是怎么回事?

    在线调试stm8l151处理是,发现usartdr寄存器无法写入,手动写寄存器也写不进去,会提示write operation to
    发表于 05-07 06:28

    STM32F103 UART2通过DMA方式发送和接收,发不出去数据是怎么回事?

    = (uint32_t)( USART2-&;gt;DR);// 设置串口发送数据
    发表于 04-30 06:17

    stm32F407 USART发送数据,TC不能置位是怎么回事?

    )//原因:SR寄存器值为0x80,TXE置位,但此时TC没有置位,移位寄存器数据没有发送完成 { bitstatus = SET; } else { bitstatus = RE
    发表于 04-25 06:15

    HAL库STM32串口2发送数组串口1异常的原因?

    ,u1buf,21,0xFFFF);//接收到数据马上用串口1发送 HAL_UART_Receive_DMA( huart
    发表于 04-25 06:01

    STM32F4初始化USART中调用HAL_USART_Receive_IT开启接收中断,HAL库中为什么专门发0XFF?

    0xFF。 然后在HAL_USART_RxCpltCallback()中会接收到0x7F(不知从何而来),调用HAL_USART_Transmit()发送,函数返回HAL_OK,但是串口
    发表于 04-18 07:43

    串口3使用USART_SendData(USART1,mydata2)发送串口1一个命令,发送数据会引起接收中断吗?

    串口3使用USART_SendData(USART1,mydata2)发送串口1一个命令,传
    发表于 04-07 07:01

    STM32F103ZET6 HAL库使用串口1DMA空闲中断接收数据时CNDTR寄存器问题如何解决?

    .hdmarx))也就是串口1的CNDTR寄存器会首先减16,然后恢复到给定长度,再次进入中断减去剩余长度(又或当长度超过16字节后空闲中断再次进入)例如限定接收数据长度为0xFFF,
    发表于 03-12 08:35

    STM32F405 DMA+空闲中断接收,DMA_GetCurrDataCounter(DMA1_Stream1)与实际发送数据不符怎么解决?

    USART,每次可以进中断,但是DMA不接收数据,接收寄存器一直为0,DR寄存器里显示是我发的一帧数据
    发表于 03-07 08:28

    如何在sdk的软件开发中寄存器赋值

    请问,在hbird-e-sdk软件开发平台中,怎么在c文件中寄存器赋值,用指针会赋值失败
    发表于 01-10 07:51

    MCU外设寄存器谨慎赋值

    今天大家介绍的是改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常。
    的头像 发表于 12-12 09:14 698次阅读
    MCU外设<b class='flag-5'>寄存器</b>谨慎<b class='flag-5'>赋值</b>法