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

酒店网站html模板网络做网站

酒店网站html模板,网络做网站,如何建立网站链接,tomcat 部署wordpress引言 前面讲述的串口通讯案例是使用寄存器方式实现的#xff0c;有利于深入理解串口通讯底层原理#xff0c;但其开发效率较低#xff1b;对此#xff0c;我们这里再讲基于HAL库实现的串口通讯轮询案例#xff0c;实现高效开发。当然#xff0c;本次案例需求仍然和前面寄…引言 前面讲述的串口通讯案例是使用寄存器方式实现的有利于深入理解串口通讯底层原理但其开发效率较低对此我们这里再讲基于HAL库实现的串口通讯轮询案例实现高效开发。当然本次案例需求仍然和前面寄存器实现的案例一样故这里就不再赘述相关需求以及电路设计如果不清楚可参考下面链接跳转查看USART_串口通讯轮询案例一寄存器实现-CSDN博客https://blog.csdn.net/2301_79475128/article/details/145222170?spm1001.2014.3001.5501 一、案例需求描述 二、硬件电路设计 由于本次案例和前面寄存器实现的案例相同故这里不再赘述可直接点击上面链接跳转查看感谢支持 三、软件设计 话不多说我们本次就基于HAL库来二次实现一下串口通讯轮询方式下的案例。首先我们必然是进入STM32CubeMX软件创建好工程并进行相应配置。 3.1 STM32CubeMX配置 首先我们进入STM32CubeMX开始创建工程 3.1.1 创建工程 单击【ACCESS TO MCU SELECTOR】然后选择自己使用的芯片类型双击它即可创建新的工程。 3.1.2 工程配置 接下来我们对其中相关部分进行配置首先最基本的配置即【System Core】中【SYS】和【RCC】时钟等的配置本次还涉及到收发数据使用的GPIO口也会在其中进行配置。 所以单击【System Core】选择【SYS】配置调试器Debug为串行单线【serial wire】这样我们STLink下载器才能使用。 然后选择【RCC】配置时钟先是外部时钟全部修改为晶振或者石英振荡器【Crystal/Ceramic Reasonator】即可 然后配置内部时钟此时直接继续单击【Clock Configuration】做如下配置即可 接着我们需要配置串口涉及到的GPIO正常情况我们应该是去图形化芯片上设置对应引脚进行配置但是由于串口通讯模块对应一个数据连接通讯的部分在STM32CubeMX中有相应的选项可以直接进行配置所以我们不必直接去配GPIO可以直接在【Connectivity】中进行所有串口的相关配置。 然后就可以开始配置串口了首先我们目前只是使用串口异步功能所以【Mode】一栏选择异步【Asynachronous】即可然后下面的硬件流控【Hardware Flow control】不开启即默认【Disable】就可以。  紧接着我们看向下方会发现有五个选项分别是参数配置【Parameter Settings】串口自身基本参数、使用常量【User Constants】、NVIC设置【NVIC Settings】和中断相关、DMA设置【DMA Settings】DMA相关、GPIO设置【GPIO Settings】GPIO相关。当前我们因为只是最简单的异步收发只使用了TX和RX所以只涉及两个GPIO口以及串口的一些参数设置。因此这里我们只要看看参数配置和GPIO设置就好了 单击进入参数设置【Parameter Settings】可以看见HAL库默认给我们配置的一些参数 显然以及包含了我们前面使用寄存器配置串口的内容这意味着后面自动生成的代码就已经帮我们基本做好了串口的初始化而这里只需要我们图形化选择一下即可很显然简单了很多。关于该部分的配置就按照其默认的配如上图所示即可。 然后我们单击进入GPIO设置【GPIO Settings】如下图看看发现以及给我们自动配置好了GPIO的东西仔细检查一下就和我们前面寄存器配置GPIO的模式是一样的即PA9 TX端配置为复用功能的推挽输出模式、PA10 RX端配置成浮空输入模式即可 最后我们再进入【Project Manager】的【Project】设置一下该工程的名字、路径以及工具链然后进入【Code Generator】勾选些选项即可。 最后我们点击【GENERATOR CODE】生成代码如果在keil中打开工程即可 3.1.3 Keil中配置 在keil中打开工程后进入【魔法棒】然后进入【Debug】点击进入【Settings】接着进入【Flash Download】勾选【Reset and Run】然后进入【Pack】取消勾选【Enable】最后不要忘记保存了。 最后就可以退出keil了。然后进入vscode开始看看代码。 3.2 代码补充 配置都做好了以后我们就来看看代码进入vscode然后将刚才创建的工程导入进来然后看看主要代码首先是GPIO文件中的 可以发现这里主要是时钟配置因为我们HAL库对GPIO的配置主要都放在USART文件中了 然后我们看看USART文件 显然这里就看见GPIO口的配置了同时我们会发现上面它定义了一个【huart1】变量我们ctrl单击这个前面的类型看看这是啥 显然这是一个结构体定义然后看看其中的内容会发现这实际上都是定义的和串口有关的东西也就是说huat1是一个串口相关功能的结构体定义。因此下图这一部分全是关于串口的参数配置 看完这俩以后我们发现当时寄存器编写的代码主要就是串口初始化的内容然而这里HAL库做的时候代码以及全部自动生成了意味着我们只需要去写一下发送接收的逻辑同时HAL库也为我们提供了接收和发送数据的相关函数直接调用即可。 那么现在我们来编写一下发送数据的测试逻辑直接来个发送或者接收字符串吧这样可以的话说发送单字符也肯定可以了。 由于我们这里直接调用相应函数即可这里就直接展示一下对应函数的使用了main.c中如下图 一句发送一句延时即可我们借助这个简单逻辑测试一下直接编译烧录看现象 显然没有问题测试成功。 然后我们继续测试接收数据功能实现一个“先接受一个字符串然后发送”的逻辑main.c代码如下先创建两个变量用于存放字符串 然后while循环中写接收并发送代码这里和我们前面接收发送点区别 多了一个判断因为这里HAL库中的发送是无脑直接拿到数据就发的我们现在在循环中没有发之前给的buffer虽然我们没写入数据但是其初始化是0所以此时接收到的就是0即发送就会直接把“\0”全部发出来。而为了避免这种情况我们对接收函数做一个判断因为其是有返回值的就是为了避免接收有问题当它确实正确接收到数据后就会返回HAL_OK所以我们这里判断它是否等于这个等于即说明接收到我们发的了这样我们再把数据发出来就好了。 然后我们测试一下编译烧录看效果 显然我们发送10个字符他就能正确接收到。说明测试没问题 当然了我们发现我们调用接收函数传入的参数需要我们给出接收字符长度这意味着我们只能接收定长的字符串如果我们发送任意长的字符串的话则会产生不符合需求的现象。 因此我们要怎么接收变长数据呢实际上HAL库也提供了发送变长数据的函数只不过名称稍微有些变化我们想之前寄存器实现边长数据的接收时多利用了一个检测空闲帧的位IDLE所以在HAL库中关于变长数据的接收函数名上就带了IDLE即如下图 上图所示函数的描述就是我们用来接收变长数据的函数了。可以发现这里参数的变化就在于之前我们要传入的字符长度这里变成了两个参数即一个是我们接收字符的总长度Size、另一个是指针表示显然就是表示我们接收到的字符实际的长度*RxLen。 那么·我们现在就来对此测试一下代码如下就是把接收函数换了一个 我们编译烧录看看效果 显然这里我们成功接收并发送了变长数据说明本次测试成功了 这样我们本次轮询方式的HAL库实现就完毕了主要就是做了定长数据的发送或接收以及变长数据的接收和发送。 其中关于一些异常情况我们这里没有展示当然大家可以自己去试试看当定长数据的接收与发送时如果电脑给芯片发了不是规定长度的字符会出现什么情况。 3.3 相关函数介绍 本次我们调用了几个HAL库提供的库函数这里展示一下官方提供的详细的函数说明只不过是英文的可以当作锻炼自己翻译能力或者如果实在看不懂也可以去用翻译软件翻译一下。 3.3.1 发送数据函数 HAL_UART_Transmit /*** brief Sends an amount of data in blocking mode.* note When UART parity is not enabled (PCE 0), and Word Length is configured to 9 bits (M1-M0 01),* the sent data is handled as a set of u16. In this case, Size must indicate the number* of u16 provided through pData.* param huart Pointer to a UART_HandleTypeDef structure that contains* the configuration information for the specified UART module.* param pData Pointer to data buffer (u8 or u16 data elements).* param Size Amount of data elements (u8 or u16) to be sent* param Timeout Timeout duration* retval HAL status*/ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);/*** brief HAL Status structures definition*/ typedef enum {HAL_OK 0x00U,HAL_ERROR 0x01U,HAL_BUSY 0x02U,HAL_TIMEOUT 0x03U } HAL_StatusTypeDef; 3.3.2 接收定长数据函数 HAL_UART_Receive /*** brief Receives an amount of data in blocking mode.* note When UART parity is not enabled (PCE 0), and Word Length is configured to 9 bits (M1-M0 01),* the received data is handled as a set of u16. In this case, Size must indicate the number* of u16 available through pData.* param huart Pointer to a UART_HandleTypeDef structure that contains* the configuration information for the specified UART module.* param pData Pointer to data buffer (u8 or u16 data elements).* param Size Amount of data elements (u8 or u16) to be received.* param Timeout Timeout duration* retval HAL status*/ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);/*** brief HAL Status structures definition*/ typedef enum {HAL_OK 0x00U,HAL_ERROR 0x01U,HAL_BUSY 0x02U,HAL_TIMEOUT 0x03U } HAL_StatusTypeDef; 3.3.3 接收变长数据函数 HAL_UARTEx_ReceiveToIdle /*** brief Receive an amount of data in blocking mode till either the expected number of data is received or an IDLE event occurs.* note HAL_OK is returned if reception is completed (expected number of data has been received)* or if reception is stopped after IDLE event (less than the expected number of data has been received)* In this case, RxLen output parameter indicates number of data available in reception buffer.* note When UART parity is not enabled (PCE 0), and Word Length is configured to 9 bits (M 01),* the received data is handled as a set of uint16_t. In this case, Size must indicate the number* of uint16_t available through pData.* param huart UART handle.* param pData Pointer to data buffer (uint8_t or uint16_t data elements).* param Size Amount of data elements (uint8_t or uint16_t) to be received.* param RxLen Number of data elements finally received (could be lower than Size, in case reception ends on IDLE event)* param Timeout Timeout duration expressed in ms (covers the whole reception sequence).* retval HAL status*/ HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, uint32_t Timeout) 以上便是本次文章的所有内容欢迎各位朋友在评论区讨论本人也是一名初学小白愿大家共同努力一起进步吧 鉴于笔者能力有限难免出现一些纰漏和不足望大家在评论区批评指正谢谢
http://www.dnsts.com.cn/news/208811.html

相关文章:

  • 通江移动网站建设网站设计制作售价多少钱
  • 做网站设计的论文中摘要怎么写前端开发可以做网站运营吗
  • 兼职做诚信网站认证网易免费企业邮箱登录入口
  • 益阳网站建设益阳微信下载安装2023新版本
  • 汽车电子商务网站建设网页版哔哩哔哩
  • 建设网站主机可以用吗广州网络
  • 网站模板安装出现预先建设数据库三合一网站方案
  • 免费做公司手机网站有域名和虚拟服务器后怎么做网站
  • 网站建立的具体步骤微信小程序游戏手游排行榜
  • 注册网站帐号注销网页视频怎么下载保存
  • 百度联盟怎么做网站建设中网站源码
  • 苏格网站建设国外学校网站模板
  • 做相亲网站需要什么流程苏州网站制作好的公司
  • 免费发帖网站大全手机app是怎么开发出来的
  • 做装修网站价格站长工具使用
  • 做3d效果图有什么好网站平面设计师证书
  • 阳东网站seo张家口城乡建设局网站
  • 网站 数据库 模板说出网站建设流程
  • 雅虎网站提交入口yy怎么一直在模板相关信息圆柱钢模板优势是什么?企业网站建设模板和定制化有什么区别呢?拼命加载中
  • 网站建设 电脑 手机大屏网页设计网站
  • 重庆网站seo建设哪家好企业网站管理系统设计与实现
  • 手机网站js电话悬浮邯郸做小程序公司
  • 网站备案信息核验单填写网站中怎么做视频直播
  • 无锡本地模板网站建设产品江苏联运建设有限公司网站
  • 哪些网站是503错误代码手机网站弹出提示框
  • asp网站例子wordpress视觉编辑器
  • 网站制作的核心要点是什么3322免费域名注册
  • 上海市建设协会网站做网站老板不发工资我拿尾款
  • 淘宝上买的网站模板怎么建设网站建筑公司企业信用分在哪里查
  • 大庆小程序制作网站排名优化电话