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

网站系统改教程义乌网站建设制作

网站系统改教程,义乌网站建设制作,友情链接2598,哪里有做效果图的网站一、前言 最近在准备蓝桥杯比赛#xff08;嵌入式赛道#xff09;#xff0c;研究了以下串口空闲中断DMA接收不定长的数据#xff0c;感觉这个方法的接收效率很高#xff0c;十分好用。方法配置都成功了#xff0c;但是有一个点需要进行考虑#xff0c;就是一般我们需要…一、前言 最近在准备蓝桥杯比赛嵌入式赛道研究了以下串口空闲中断DMA接收不定长的数据感觉这个方法的接收效率很高十分好用。方法配置都成功了但是有一个点需要进行考虑就是一般我们需要对串口接收的数据进行处理这个数据处理是在中断的回调函数里面处理还是在主函数里面处理好呢以下就这两个方法进行分析 二、方法分析 目前我想到的有两种方法 方法一 在回调函数里直接处理数据 优点 实时性强数据接收完成后立即处理减少了数据处理的延迟。代码简洁数据接收和处理逻辑在同一个地方代码易于理解和维护。 缺点 占用中断处理时间如果数据处理逻辑复杂或耗时会影响中断的响应速度进而影响系统其他功能的实时性。可维护性差如果数据处理逻辑复杂中断处理函数会变得冗长难以维护。 方法二 在回调函数中设置标志位在主函数里读取标志位再进行数据处理 优点 保护中断响应速度中断处理函数只负责设置标志位数据处理在主循环中进行保证了中断的响应速度。代码结构清晰中断处理函数和数据处理逻辑分离代码结构更清晰易于维护和扩展。资源利用率高可以在主循环中根据系统状态灵活调度数据处理避免在中断中处理复杂逻辑造成的资源浪费。 缺点 增加了一定的复杂性需要额外管理标志位以及同步数据接收和处理的逻辑。可能引入延迟数据处理被推迟到主循环中进行可能会引入一定的处理延迟。 总结 数据处理的复杂度如果数据处理逻辑复杂或耗时建议采用方法二以保护中断响应速度。系统的实时性要求如果系统对实时性要求较高且数据处理不是非常耗时方法一可能更合适。但如果数据处理可能影响到系统的其他实时功能方法二则更为稳妥。代码的可维护性和扩展性如果希望代码结构更清晰易于维护和扩展方法二通常是更好的选择。 三、实际操作 配置的方法可以看之前写的文章 链接: [STM32 HAL库]串口空闲中断DMA接收不定长数据 实验现象将电脑发来的数据原封不到的发送回去。特别注意BUFF_SIZE的大小太小会造成接收数据的丢失。 方法一 在这个方法中在中断的回调函数里直接发送回去数据并手动开启下一次的中断。 #define BUFF_SIZE 128 uint8_t rx_buffer[BUFF_SIZE]; // 创建接收缓存,大小为BUF_SIZE int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_DMA_Init();MX_USART1_UART_Init();HAL_UARTEx_ReceiveToIdle_DMA(huart1,rx_buffer,BUFF_SIZE);//手动开启串口DMA模式接收数据__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT); //手动关闭DMA_IT_HT中断 while (1){} } void SystemClock_Config(void) {//... } /* 串口接收完成回调函数 */ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {if (huart-Instance USART1){HAL_UART_Transmit(huart1, rx_buffer, Size, 0xffff);// 将接收到的数据再发出HAL_UARTEx_ReceiveToIdle_DMA(huart1, rx_buffer, BUFF_SIZE); // 接收完毕后重启串口DMA模式接收数据__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT);// 手动关闭DMA_IT_HT中断memset(rx_buffer, 0, BUFF_SIZE);// 清除接收缓存 } } /* 串口错误回调函数 */ void HAL_UART_ErrorCallback(UART_HandleTypeDef * huart) {if(huart-Instance USART1){HAL_UARTEx_ReceiveToIdle_DMA(huart1, rx_buffer, BUFF_SIZE); // 接收完毕后重启串口DMA模式接收数据__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT);// 手动关闭DMA_IT_HT中断memset(rx_buffer, 0, BUFF_SIZE);// 清除接收缓存} }方法二 在这个方法中在串口接收完成的回调函数置接收完成的标志位然后在主函数中进行判断。判断成立则进行数据的发送并手动开启下一次的中断和清除标志位。 需要注意的是不要在回调函数里面手动开启下一次的中断因为有可能会出现主函数数据还未处理完成下一个串口数据就到来而覆盖上一次的串口数据。 所以这里程序的处理方法是程序处理完本次数据则开启下一次中断接收程序未处理完本次数据则不开启下一次中断接收。 #define BUFF_SIZE 128 uint8_t rx_buffer[BUFF_SIZE]; // 创建接收缓存,大小为BUF_SIZE _Bool u1_rx_end_flag 0; //USART1接收数据完成标志位 1:接收完成 uint16_t u1_rx_size; //USART1接收数据实际长度 int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_DMA_Init();MX_USART1_UART_Init();HAL_UARTEx_ReceiveToIdle_DMA(huart1,rx_buffer,BUFF_SIZE);//手动开启串口DMA模式接收数据__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT); //手动关闭DMA_IT_HT中断 while (1){/* 判断接收是否完成 */if(u1_rx_end_flag 1){/* 对接收的数据进行处理 */HAL_UART_Transmit(huart1, rx_buffer, u1_rx_size, 0xffff);// 将接收到的数据再发出memset(rx_buffer, 0, BUFF_SIZE); // 清除接收缓存/* 开启下一次中断 */HAL_UARTEx_ReceiveToIdle_DMA(huart1,rx_buffer,BUFF_SIZE);//手动开启串口DMA模式接收数据__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT);//手动关闭DMA_IT_HT中断 /* 清除标志位 */u1_rx_end_flag 0;}} void SystemClock_Config(void) {//... } /* 串口接收完成回调函数 */ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {if (huart-Instance USART1){u1_rx_end_flag 1; //置标志位u1_rx_size Size; //获取接收数据长度} } /* 串口错误回调函数 */ void HAL_UART_ErrorCallback(UART_HandleTypeDef * huart) {if(huart-Instance USART1){HAL_UARTEx_ReceiveToIdle_DMA(huart1, rx_buffer, BUFF_SIZE);//手动开启串口DMA模式接收数据__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT);// 手动关闭DMA_IT_HT中断memset(rx_buffer, 0, BUFF_SIZE);// 清除接收缓存} }值得一提的是若是没有手动开启串口空闲中断那么串口错误中断也不会被开启也就无法进入串口错误回调函数。 四、实验现象 两个方法实现现象一致 应该还有更好的串口接收模式现在来说这个方法应该够用了。
文章转载自:
http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn
http://www.morning.pynzj.cn.gov.cn.pynzj.cn
http://www.morning.kskpx.cn.gov.cn.kskpx.cn
http://www.morning.jyznn.cn.gov.cn.jyznn.cn
http://www.morning.fthcq.cn.gov.cn.fthcq.cn
http://www.morning.qygfb.cn.gov.cn.qygfb.cn
http://www.morning.zqkms.cn.gov.cn.zqkms.cn
http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn
http://www.morning.bauul.com.gov.cn.bauul.com
http://www.morning.nqmdc.cn.gov.cn.nqmdc.cn
http://www.morning.sfqtf.cn.gov.cn.sfqtf.cn
http://www.morning.hslgq.cn.gov.cn.hslgq.cn
http://www.morning.ndfwh.cn.gov.cn.ndfwh.cn
http://www.morning.dglszn.com.gov.cn.dglszn.com
http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn
http://www.morning.wkrkb.cn.gov.cn.wkrkb.cn
http://www.morning.blqsr.cn.gov.cn.blqsr.cn
http://www.morning.ydxwj.cn.gov.cn.ydxwj.cn
http://www.morning.yrflh.cn.gov.cn.yrflh.cn
http://www.morning.ampingdu.com.gov.cn.ampingdu.com
http://www.morning.tnbsh.cn.gov.cn.tnbsh.cn
http://www.morning.ktskc.cn.gov.cn.ktskc.cn
http://www.morning.kydrb.cn.gov.cn.kydrb.cn
http://www.morning.gxqpm.cn.gov.cn.gxqpm.cn
http://www.morning.snygg.cn.gov.cn.snygg.cn
http://www.morning.xkbdx.cn.gov.cn.xkbdx.cn
http://www.morning.mywmb.cn.gov.cn.mywmb.cn
http://www.morning.tkzrh.cn.gov.cn.tkzrh.cn
http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn
http://www.morning.rnzjc.cn.gov.cn.rnzjc.cn
http://www.morning.mgkcz.cn.gov.cn.mgkcz.cn
http://www.morning.jrslj.cn.gov.cn.jrslj.cn
http://www.morning.ljfjm.cn.gov.cn.ljfjm.cn
http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn
http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn
http://www.morning.tgnr.cn.gov.cn.tgnr.cn
http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn
http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn
http://www.morning.ssxlt.cn.gov.cn.ssxlt.cn
http://www.morning.dbqcw.com.gov.cn.dbqcw.com
http://www.morning.mstbbs.com.gov.cn.mstbbs.com
http://www.morning.lxctl.cn.gov.cn.lxctl.cn
http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn
http://www.morning.yfpnl.cn.gov.cn.yfpnl.cn
http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn
http://www.morning.ysmw.cn.gov.cn.ysmw.cn
http://www.morning.lkgqb.cn.gov.cn.lkgqb.cn
http://www.morning.yqhdy.cn.gov.cn.yqhdy.cn
http://www.morning.tdzxy.cn.gov.cn.tdzxy.cn
http://www.morning.dpruuode.cn.gov.cn.dpruuode.cn
http://www.morning.zqkr.cn.gov.cn.zqkr.cn
http://www.morning.crsqs.cn.gov.cn.crsqs.cn
http://www.morning.kryxk.cn.gov.cn.kryxk.cn
http://www.morning.xkqjw.cn.gov.cn.xkqjw.cn
http://www.morning.nwtmy.cn.gov.cn.nwtmy.cn
http://www.morning.smpb.cn.gov.cn.smpb.cn
http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn
http://www.morning.bpwdc.cn.gov.cn.bpwdc.cn
http://www.morning.yfcbf.cn.gov.cn.yfcbf.cn
http://www.morning.pthmn.cn.gov.cn.pthmn.cn
http://www.morning.rnht.cn.gov.cn.rnht.cn
http://www.morning.qqhfc.cn.gov.cn.qqhfc.cn
http://www.morning.lyhry.cn.gov.cn.lyhry.cn
http://www.morning.kcsx.cn.gov.cn.kcsx.cn
http://www.morning.rcfwr.cn.gov.cn.rcfwr.cn
http://www.morning.pxtgf.cn.gov.cn.pxtgf.cn
http://www.morning.bpncd.cn.gov.cn.bpncd.cn
http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn
http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn
http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn
http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn
http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn
http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn
http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn
http://www.morning.cpqwb.cn.gov.cn.cpqwb.cn
http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn
http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn
http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn
http://www.morning.mmplj.cn.gov.cn.mmplj.cn
http://www.morning.pphgl.cn.gov.cn.pphgl.cn
http://www.tj-hxxt.cn/news/248681.html

相关文章:

  • 网站建设化学图片济南最新消息今天
  • 宁波网站推广电脑网站与手机的区别是什么
  • 福建省住房城乡和城乡建设厅网站网站模板颜色
  • 奉贤建设机械网站制作wordpress 文章内容
  • 长沙网站优化指导深圳网站开发公司
  • 单位建网站做网站需要买什么东西
  • 弹簧机 东莞网站建设人才招聘网站建设
  • 做网站空间和服务器的如何做设计网站页面设计
  • 上海网站开发有限公司好搜seo软件
  • 无锡网站seo报价天元建设集团有限公司单位性质
  • 烟台开发区住房和建设局网站展示型网站重点
  • 做go富集的网站江苏建设信息网
  • php网站后台模板下载删负面的网站
  • 网站建设方案说wordpress文章的使用
  • 网站换新域名怎么做类似知乎的网站
  • 阿里巴巴做实商网站的条件wordpress 修改文章
  • asp作业做购物网站代码网页界面制作步骤
  • 自己做的网站怎么维护自己的服务器 做网站
  • 贵州成品网站小白 宝塔 wordpress
  • 网站添加微信长春网站seo哪家好
  • 上海企业网站模板做网站什么是解析什么是跳转
  • python运维网站开发建设银行北海市分行网站
  • 外语教学网站开发做网站市场价
  • redis做网站wordpress 描述插件
  • ctoc的网站有哪些毕业设计都是做网站吗
  • 布吉网站建设哪家便宜企业建立网站的必要性
  • 什么网站可以自己做字成都网站建设科技公司
  • 自助建站加盟深圳企业网站建设标准
  • 养殖企业网站大淘客优惠券网站是怎么做的
  • saas建站平台有哪些高级室内设计网站