注意是UART4,不是USART4

  在stm32中UART和USART是不相同的

  USART是通用同步/异步串行接收/发送器

  UART是通用异步收发传输器

  简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。

  USART支持同步模式,因此USART 需要同步时钟信号USART_CK(如STM32 单片机),通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。

  UART需要固定的波特率,就是说两位数据的间隔要相等。 UART总线是异步串口,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上有两根线,一根用于发送,一根用于接收。 显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。

  UART是一个并行输入成为串行输出的芯片,通常集成在主板上,多数是16550AFN芯片。因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。

  作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。

  USART收发模块一般分为三大部分:时钟发生器、数据发送器和接收器。控制寄存器为所有的模块共享。时钟发生器由同步逻辑电路(在同步从模式下由外部时钟输入驱动)和波特率发生器组成。发送时钟引脚XCK仅用于同步发送模式下,发送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移位寄存器、校验位发生器和用于处理不同浈结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多浈数据无延时的通信。接收器是USART模块最复杂的部分,最主要的是时钟和数据接收单元。数据接收单元用作异步数据的接收。除了接收单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器(接收UDR)。接收器支持与发送器相同的帧结构,同时支持桢错误、数据溢出和校验错误的检测。USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。

  综上可以看出,USART相对UART来说是在异步通信的基础上还有同步的功能,USART能够提供主动时钟。

  UAST4的配置

  注意:在使用UART4之前,首先要确保你的单片机是支持UART4的(我用到的单片机是STM32F103vet6),具体是否支持UART4,可以参考数据手册。同时要注意,UART4是挂载到APB1总线上的!

  初始化程序:

  为了方便调试输出,我将USART1也进行了初始化,对比一下不难发现UASRT1的初始化和UART4的初始化几乎相同

  GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART1 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA,  ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);  //注意UART4是挂载在APB1总线上的,用RCC_APB1PeriphClockCmd()函数初始化!/* USART1 GPIO config *//* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure);/* USART1 mode config */USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;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(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);//³õʼ»¯UART4-TX-PC10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);// //UART-RX-PC11GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;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(UART4, &USART_InitStructure);USART_Cmd(UART4, ENABLE);USART_ClearFlag(UART4,USART_FLAG_TC);

资料供大家学习参考

- UART串口 -

stm32 ucosii消息队列 串口_STM32F1的UART4串口配置相关推荐

  1. stm32 ucosii消息队列 串口_正点原子STM32F407探索者开发板资料连载第六十三章 UCOSII 实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weix ...

  2. ucosii消息队列使用

    ucosii消息队列简介 ucosii的消息队列源码定义在os_q.c文件:接口全部声明在ucos_ii.h,总共有如下接口: void *OSQAccept(OS_EVENT *pevent,INT ...

  3. RTX5 | 消息队列04 - (实战技巧)串口中断回调函数ISR同步线程

    文章目录 一.前言 二.实验目的 三.API 3.2.osMessageQueueGet 四.代码 4.1.main.h 4.2.stm32f1xx.it.c 4.3.main.c 五.Event R ...

  4. ucosII 消息队列 应用总结

    概念  消息队列实际上就是邮箱阵列.  任务和中断都可以将一则消息放入队列中,任务可以从消息队列中获取消息.  先进入队列的消息先传给任务(FIFO).  每个消息队列有一张等待消息任务的等待 ...

  5. UCOSII消息队列

    消息队列介绍 消息队列是µC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量.因具体的应用有所不同,每个指针指向的数据结构变量也有所不同.为了使用µ ...

  6. RTX5 | 消息队列01 - 创建消息队列

    文章目录 一.前言 二.实验的目的 三.API 3.1.osMessageQueueId_t 3.2.osMessageQueueAttr_t 3.3.osMessageQueueNew 四.代码 4 ...

  7. 消息队列 策略_太狠了!京东T8架构师建议吃透这40W字消息队列文档,涨薪15K不是梦...

    "RabbitMQ?""Kafka?""RocketMQ?"...在日常学习与开发过程中,我们常常听到消息队列这个关键词.我也在我的多篇文章 ...

  8. springboot集成rabbitmq,根据查询的信息创建多个消息中心和消息队列,并实现不同的消息发送到不同的消息中心

    今天接到一个需求,就是在发送消息到rabbitmq消息中心的时候,需要根据设备类型,将消息发送到不同的消息队列,因此要创建不同的消息队列.       修改之前是把配置信息写在配置文中,项目启动时,获 ...

  9. SpringCloud笔记(四)消息队列

    消息队列 经过前面的学习,我们已经了解了我们之前的技术在分布式环境下的应用,接着我们来看最后一章的内容. 那么,什么是消息队列呢? 我们之前如果需要进行远程调用,那么一般可以通过发送HTTP请求来完成 ...

最新文章

  1. S-BEV:用于天气和光照不变的3-DoF定位的语义鸟瞰视图表示
  2. Proteus与Keil联调
  3. oracle backup arch,ORCLE RMAN备份脚本
  4. 深度、广度优先生成树(C完整代码)
  5. KEIL5 编译器导致的程序异常
  6. php关闭当前页_php如何直接关闭页面注销SESSION
  7. 训练日志 2019.7.26
  8. C ++ 类 | 构造函数w参数_6
  9. Java编程思想学习笔记-第11章
  10. IDEA使用@Data注解,类调用get、set方法标红的解决办法
  11. 流水线、精益生产、丰田生产方式和TOC的基本原则
  12. ORACLE功能GREATEST功能说明具体实例
  13. mysql中日期相减_1104绝密公式,如何直接用2个日期直接算剩余时间区间
  14. 汽车技术市场动态分析
  15. php有个schost.exe_svchost.exe是什么
  16. Leetcode——860.柠檬水找零——题解—+代码实现
  17. Android基础之RemoteViews
  18. 数字图像处理 直方图均衡化 MATLAB实验
  19. css 获取第N个子元素
  20. 阿里面试官问我Mybatis,我怂了吗?

热门文章

  1. jq输出文本_如何用 Linux 命令行工具解析和格式化输出 JSON | Linux 中国
  2. 合作开发过程产生的专利_被起诉专利侵权怎么办?专利律师给你出招!
  3. mysql 5.5.18下载_MySQL5.7.18下载和安装过程图文详解
  4. ios下js复制到粘贴板_EXCEL被你忽视的粘贴板-11
  5. centos常用命令_二、Docker镜像是什么?Docker常用命令
  6. 苹果7手机严重卡顿_苹果手机仅配备4GB运存都不会卡顿,安卓系统为何要更多内存?...
  7. html中所有的标签,HTML中的所有标签及其做用!
  8. 爬虫scrapy模块
  9. axis2开发webservice之编写Axis2模块(Module)
  10. Tensorflow学习笔记4:分布式Tensorflow