当前位置: 首页 > news >正文

网站域名备案变更张家港网站建设模板

网站域名备案变更,张家港网站建设模板,建筑方案设计流程步骤,网站建设的作业模板#xff08;转载#xff09;原文链接#xff1a;https://blog.csdn.net/qq_39344192/article/details/131470735 1. 什么是UART#xff1f; UART是一种异步串行通信接口#xff0c;常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输#xff0c;使… 转载原文链接https://blog.csdn.net/qq_39344192/article/details/131470735 1. 什么是UART UART是一种异步串行通信接口常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输使用起来相对简单。UART通常包含发送器Transmitter和接收器Receiver通过两根信号线传输线进行双向通信。 2. UART协议内容简介 UART协议将一长串数据切成很多固定长度的小段分别发送。每小段数据前后会加上一些附加数据以保证通信的实时性和准确性最后形成的每个小段叫做一个数据包——即1帧数据。 起始位发出1位低电平信号表示开始传输字符。数据位真正发送的数据一般为8位1个字节常采用ASCII编码从最低位开始发送。校验位用于检验接收到的数据是否正确分为奇校验和偶校验。停止位一组数据的结束传输的标志。可以是1位、1.5位、2位的高电平。空闲位空闲时数据线为高电平状态代表无数据传输。波特率衡量传输速率的指标。UART通信中波特率等于比特率。 UART通信的两个设备间以上因素必须完全一致才能实现数据通信。 3. UART轮询收发 UART轮询收发时CPU会不断检测串口的状态位来判断数据收发的情况。 3.1 UART轮询收发的优缺点 UART轮询收发是一种简单直接的UART通信方式它具有以下优点和缺点 优点 简单易实现相比于中断或DMA方式进行数据收发UART轮询收发的实现相对简单不需要额外配置中断或DMA控制器减少了开发的复杂性。低延迟由于没有中断处理程序的介入和数据传输的等待时间UART轮询收发可以实现较低的延迟对实时性要求较高的应用场景较为适用。占用CPU资源效能低UART轮询收发需要通过不断的轮询来检查发送和接收缓冲区的状态这会占用CPU的资源导致CPU无法充分利用来执行其他任务。 缺点 占用CPU资源效能低UART轮询收发需要通过不断的轮询来检查发送和接收缓冲区的状态这会占用CPU的资源导致CPU无法充分利用来执行其他任务。 UART轮询收发适用于简单的、对实时性要求不高的低速通信场景。但在对实时性、效率和灵活性要求较高的应用中中断或DMA方式可能更加适合。在选择UART通信方式时需要根据具体应用需求进行权衡和选择。 3.2 UART轮询收发相关的函数 初始化UART参数首先需要对UART进行初始化包括波特率Baud rate、数据位数、校验位、停止位等参数的设置。这些参数决定了数据的传输格式。 初始化函数HAL_UART_Init(UART_HandleTypeDef *huart);功能根据串口句柄指定的参数进行串口初始化。入口参数huart串口句柄的地址指针。返回值HAL状态值。说明使用CubeMX配置工程时初始化代码会自动生成我们不需要再对串口进行初始化。 发送数据要发送数据首先将待发送的数据写入UART发送缓冲区然后调用轮询发送函数。在轮询方式下单片机会一直检查是否完成发送直到超过设定时间或数据发送完成。 轮询发送函数HAL_UART_Transmit(UART_Handle TypeDef *huart, uint 8_t *pData, uint 16_t Size, uint 32_t Timeout);功能在轮询方式下发送一定数量的数据。入口参数huart串口句柄的地址。pData待发送数据的首地址。Size发送的字节数。Timeout超时等待时间 以毫秒为单位。返回值HAL状态值。 接收数据要接收数据需要从UART接收缓冲区读取数据。同样在轮询方式下单片机会一直检查是否完成接收直到超过设定时间或接收到所有数据。 轮询接收函数HAL_UART_Receive(UART_Handle TypeDef *huart, uint 8_t *pData, uint 16_t Size, uint 32_t Timeout);功能在轮询方式下接收一定数量的数据。入口参数huart串口句柄的地址。pData存放数据的首地址。Size接收数据的字节数。Timeout超时等待时间 以毫秒为单位。返回值HAL状态值。 3.3 【实践】使用蓝牙模块发送数据 使用UART协议向手机循环发送“Hello World”语句。 3.3.1 配置UART 左侧connectivity中点击USART1。右侧Mode选择为Asynchronous(异步通信)配置参数 Baud Rate波特率9600Bits/sWord Length字长8 BitsParity奇偶校验位无校验位Stop Bits停止位1位 USART包括UART与USRT。我们使用USART的UART模式即Asynchronous。 3.3.2 连接单片机与蓝牙模块 单片机蓝牙模块RXTXTXRX5VVCCGNDGND 3.3.3 代码实现 在main.c中添加如下语句 /* 添加至引用区 */ #include string.h // strlen函数依赖该头文件 /* 添加至变量定义区*/ char txBuffer[] Hello World; // 需要发送的数据 /* 写在main()的while(1)循环内 */ while(1) {HAL_UART_Transmit(huart1, (uint8_t *)txBuffer, strlen(txBuffer), 1000);HAL_Delay(1000); }4. UART中断收发 4.1 UART中断收发的优缺点 优点 提高系统效率相比于UART轮询收发方式UART中断收发可以提高系统的效率。当每完成发送或接收一帧数据时中断会通知CPU进行相应的处理而不需要CPU不断地轮询发送或接收缓冲区释放了CPU资源使CPU可以同时执行其他任务;系统响应更快通过使用中断机制UART中断收发可以提供更快的系统响应时间。一旦有数据可发送或可接收时中断立即触发通知CPU进行相应操作减少了数据传输的延迟。灵活性UART中断收发具有较高的灵活性。中断处理程序可以对数据进行灵活的处理和控制可以根据实际需求进行相应的操作如解析数据、执行特定任务等。复杂性增加相对于UART轮询收发方式UART中断收发的实现相对复杂一些。需要正确配置中断触发条件和中断优先级同时编写中断处理程序进行数据的发送和接收操作。 缺点 中断开销中断处理程序的执行会占用一定的CPU时间和系统资源。频繁的中断触发可能会增加系统的开销。实时性限制尽管UART中断收发可以提高系统的响应时间但它仍然受限于中断处理程序的执行时间和优先级。在高实时性要求的应用中中断处理程序的执行时间必须保持足够短以确保数据的及时处理和传输。占用CPU资源在传输数据量较大时如果采用中断方式每收发一帧的数据CPU都会被打断造成CPU无法处理其他事务。因此在批量数据传输通信波特率较高时建议采用DMA方式。 UART中断收发相较于UART轮询收发提高了系统的效率但是遇到大量、高速的数据传输时仍然会对CPU的性能产生影响。 4.2 UART中断收发时触发中断的流程 使能中断后每收发1帧数据后UART会触发UART全局中断。此时程序会进入到中断处理函数 USART1_IRQHandler()。在这个函数中又调用了HAL库的中断处理函数HAL_UART_IRQHandler(huart1)该函数会通过判断中断类型来决定调用哪个函数。 如果收发完成 - 进入发送/接收回调函数 如果产生错误 - 进入错误回调函数 如果未收发完 - 继续发送/接收。 简而言之每完成一帧数据的收发都会调用一次中断处理函数但只有当收发完成时才会调用发送/接收回调函数。在实际操作中我们一般不需要对中断处理函数HAL_UART_IRQHandler()进行修改。我们将收发完成时的操作逻辑写在回调函数中即可。 4.3 UART中断收发相关的函数 4.3.1 发送相关函数 中断发送函数HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);功能在中断方式下发送一定数量的数据。入口参数huart串口句柄的地址。pData发送数据的首地址。Size发送数据的字节数。返回值HAL状态值。 发送回调函数HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);功能本函数会在中断发送完成时被调用。入口参数huart串口句柄的地址。返回值无 4.3.2 接收相关函数 中断接收函数HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);功能在中断方式下接收一定数量的数据。入口参数huart串口句柄的地址。pData存放数据的首地址。Size接收数据的字节数。返回值HAL状态值。 接收回调函数HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);功能本函数会在中断接收完成时被调用。入口参数huart串口句柄的地址。返回值无 4.4 回调函数的使用方式 在stm32f1xx_hal_uart.c文件中我们可以找到回调函数的声明方式下以接收回调函数为例。 关注到函数声明前带有__weak修饰我们一般将这种函数称之为“弱函数”。含有__weak标识的函数我们可以自行声明一个同名函数最终编译器在编译的时候会选择我们自己定义的函数。如果我们没有声明该函数则会调用有__weak修饰的函数。因此我们只需要在合适的位置自己声明一个回调函数即可不必在该文件中进行修改。 4.5 【实践】使用中断方式收发数据 通过蓝牙向单片机发送三个英文字母单片机将大小写翻转后发回。 4.5.1 配置UART 在上一节配置的基础上我们打开UART1的全局中断。 4.5.2 代码实现 我们在main.c中添加如下代码 /* 添加至宏定义区 */ #define rxDataLen 3 //接收三个字节的数据 /* 添加至变量定义区*/ char rxBuffer[rxDataLen]; // 存储接收到的数据的数组int main() {/* 添加至while(1)循环前*/HAL_UART_Receive_IT(huart1, (uint8_t *)rxBuffer, rxDataLen); // 中断方式接收三个字节数据while(1) // 注意不要将中断接收写在while循环内{HAL_Delay(1);} }在完成一次接收后我们需要将接收到的字母大小写翻转并输出。我们需要在接收回调函数中实现这一功能定义接收回调函数如下。 // 接收回调函数由于需要覆盖原先的弱函数本函数名称不能更改 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {if(huart huart1) // 如果是串口1{for(int i 0; i rxDataLen; i){if(rxBuffer[i] a rxBuffer[i] z){rxBuffer[i] A - a;}else if(rxBuffer[i] A rxBuffer[i] Z){rxBuffer[i] - A - a;}}HAL_UART_Transmit_IT(huart1, (uint8_t *)rxBuffer, rxDataLen);}// 使用HAL_UART_Receive_IT()时只会进入一次中断。因此需要在回调函数内再次调用该函数HAL_UART_Receive_IT(huart1, (uint8_t *)rxBuffer, rxDataLen); }5. UART使用DMA进行收发 空闲中断 5.1 啥是DMA DMADirect Memory Access直接内存访问是一种计算机系统中的数据传输技术它允许外设直接访问寄存器而无需通过CPU的干预。DMA技术可以提高数据传输的效率和系统性能减轻CPU的负担。 简单点来说DMA收发与轮询、中断都有所不同。在收发数据时CPU只需告诉DMA数据的来源以及目的地址等信息即可而无需参与中间的所有传输过程例如中断收发时每收发一帧数据都会进入中断处理函数而DMA只在接收完成等少数时刻触发中断大大降低了CPU的压力。 5.2 什么是空闲中断 空闲中断Idle Interrupt是UART通信中的一种中断类型。当UART处于空闲状态没有接收到数据且持续时间超过一个帧的传输时间时空闲中断会触发调用上节提到的函数USART1_IRQHandler。空闲中断可以用于检测数据帧的结束或接收数据的完成。 5.3 相关函数 使能UART的特定中断宏__HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__);参数__HANDLE__指向UART句柄的指针__INTERRUPT__要使能的中断标志位。说明本节会使用到空闲中断即UART_IT_IDLE DMA发送函数HAL_UART_Transmit_DMA(UART_Handle TypeDef *huart, uint 8_t *pData, uint 16_t Size);入口参数huart串口句柄的地址。pData发送数据的首地址。Size发送数据的字节数。 DMA接收函数HAL_UART_Receive_DMA(UART_Handle TypeDef *huart, uint 8_t *pData, uint 16_t Size);入口参数huart串口句柄的地址。pData存放数据的首地址。Size接收数据的字节数。 禁用DMA传输宏__HAL_DMA_DISABLE(_HANDLE_);参数__HANDLE__指向UART句柄的指针 使能DMA传输宏__HAL_DMA_ENABLE(_HANDLE_);参数__HANDLE__指向UART句柄的指针 设置DMA传输计数器值宏__HAL_DMA_SET_COUNTER(__HANDLE__, __COUNTER__);参数__HANDLE__指向UART句柄的指针__COUNTER__要设置的计数器值。 获取DMA传输的计数器值宏__HAL_DMA_GET_COUNTER(__HANDLE__);参数__HANDLE__指向UART句柄的指针宏定义#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)-Instance-CNDTR)说明这个宏需要我们自行定义。 我们可以利用这个宏定义来获取接收到的数据的长度。 接收到的数据长度 设置的长度 - 当前DMA计数器的值即rxLen rxBufferLen - __HAL_DMA_GET_COUNTER(__HANDLE__); 5.4 【实践】使用DMA 空闲中断实现不定长数据的接收 结合DMA以及空闲中断实现接收不定长度的一段数据发送这一数据的长度。 5.4.1 配置UART 参考前两节配置好UART以及全局中断。我们还需要开启UART的DMA接收。 5.4.2 代码实现 在本节中我们将代码按用途划分为不同函数逐一实现。先定义如下全局变量以及宏变量。 #define rxBufferLen 40 // 接收数据的最大长度 #define __HAL_DMA_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)-Instance-CNDTR (uint16_t)(__COUNTER__)) char rxBuffer[rxBufferLen]; // 用于存放接收到的数据程序运行之初我们需要先对DMA接收进行初始化该初始化函数应当在main()函数内调用一次。 void UART_InitDMAReceive() // 初始化函数 {__HAL_UART_CLEAR_IDLEFLAG(huart1); // 清除空闲中断标志位__HAL_UART_ENABLE_IT(huart1, UART_IT_IDLE); // 开启UART的空闲中断HAL_UART_Receive_DMA(huart1, (uint8_t*)rxBuffer, rxBufferLen ); // 启动DMA接收 }每当发生空闲中断或接收到的数据超过缓存区大小时会产生一次中断。我们首先需要自行编写中断回调函数。 void UART_DMAIdleCallback(UART_HandleTypeDef *huart) {if(huart huart1){// 停止DMA接收__HAL_DMA_DISABLE(huart-hdmarx);// 计算接收到的数据长度uint8_t dataLen rxBufferLen - __HAL_DMA_GET_COUNTER(huart-hdmarx) 0; // 发送数据长度使用轮询方法HAL_UART_Transmit(huart1, dataLen, 1, 10);// 重启DMA接收__HAL_DMA_SET_COUNTER(huart-hdmarx, rxBufferLen); // 重设DMA计数器__HAL_DMA_ENABLE(huart-hdmarx); // 使能DMA接收} }我们在中断处理函数内添加如下内容该函数位于文件stm32g4xx_it.c内。 void USART1_IRQHandler(void) {/* USER CODE BEGIN USART1_IRQn 0 *//* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(huart1);/* USER CODE BEGIN USART1_IRQn 1 */if(__HAL_UART_GET_FLAG(huart1, UART_FLAG_IDLE) ! RESET) // 判断中断是否为空闲中断{__HAL_UART_CLEAR_IDLEFLAG(huart1); // 清除空闲中断标志位UART_DMAIdleCallback(huart1); // 空闲回调函数}/* USER CODE END USART1_IRQn 1 */ }
http://www.w-s-a.com/news/116134/

相关文章:

  • 网站建设要什么知识广州注册公司地址怎么解决
  • 自己可以做开奖网站吗wordpress和hexo
  • 成都网站关键词优化wordpress价格
  • 网站开发后端站建设 app开发网站
  • 毕业设计做网站好的想法开发网站代码量
  • 西宁网站建设排名wordpress的站点地址如何配置
  • 医院网站建设 价格app和网站开发的成本
  • 常见的网站开发工具山东建设厅官方网站李兴军
  • 二级院系网站建设情况做网站域名是什么意思
  • 网站开发双语辽宁省建设厅网站怎样下载表格
  • 网站后台密码怎么修改百度查重免费入口
  • 衡阳网站页面设计公司绍兴网站设计
  • 青岛手机建站多少钱做图表的网站 免费
  • 如何去建立和设计一个公司网站开封建设教育协会网站
  • 南充市住房和城乡建设局考试网站wordpress 下载模板站
  • 有没有单纯做旅游攻略的网站保定建站方案
  • 2017网站建设报价方案2022年企业所得税税率表一览
  • 可以做婚礼视频的网站有哪些工程公司管理制度
  • 做农产品网站需要做的准备中文手机网站设计案例
  • 福州做网站软件seo搜索优化专员招聘
  • 建站技术博客wordpress响应时间
  • 农业网站模板WordPress安徽省建设工程造价管理协会网站
  • 网站后台策划书破解版手游app平台
  • 宿迁网站建设介绍公司wordpress 文章 分类 页面
  • 建设通同类网站网站设计公司种类
  • 台州专业做网站网站可以个人做吗
  • 个人logo在线生成免费乐陵德州seo公司
  • 网站回答问题app怎么做专业定制网红柴火灶
  • 网站做的最好的公司行业网址大全
  • 内网怎么做网站服务器seo统计