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

哈尔滨seo优化/优化流程

哈尔滨seo优化,优化流程,海口新闻网,医院网站建设的目的今天终于实现了,未知长度的数据,串口1接收上位机的指令,串口2转发指令给模块,再接收模块数据通过串口2发送出去。整个串口的收发由DMA完成,运用串口总线空闲中断,这个真的是STM32的内部很好的一个东东&…

  今天终于实现了,未知长度的数据,串口1接收上位机的指令,串口2转发指令给模块,再接收模块数据通过串口2发送出去。整个串口的收发由DMA完成,运用串口总线空闲中断,这个真的是STM32的内部很好的一个东东,不消耗CPU资源。

  憋了我两天了,日思夜想,主要因为我对整个的逻辑开始没认真分析。

 程序参考部分http://www.amobbs.com/forum.php?mod=viewthread&tid=5486343&highlight=STM32%E5%AE%9E%E7%8E%B0USART%2BDMA%E6%8E%A5%E6%94%B6%E6%9C%AA%E7%9F%A5%E9%95%BF%E5%BA%A6%E7%9A%84%E6%95%B0%E6%8D%AE%E5%92%8C%E5%8F%91%E9%80%81

 下面贴上部分我修改的程序,配置都是参考以上的,上面的写得非常详细,非常推荐看一下。

 在定义这一块修改了一下:

#define SENDBUFF_SIZE   10240

vu8 USART1_SEND_DATA[SENDBUFF_SIZE];     //512
vu8 USART2_SEND_DATA[SENDBUFF_SIZE]; //512
vu8 USART1_RECEIVE_DATA[SENDBUFF_SIZE]; //512
vu8 USART2_RECEIVE_DATA[SENDBUFF_SIZE]; //512
vu8 USART1_TX_Finish=1;// USART1发送完成标志量
vu8 USART2_TX_Finish=1; // USART2发送完成标志量

 

在DMA的配置里面

 DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;//512

 

中断里面:

串口1中断

void USART1_IRQHandler(void)
{
 u16 DATA_LEN;
u16 i;

if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)//如果为空闲总线中断
   {
DMA_Cmd(DMA1_Channel5, DISABLE);//关闭DMA,防止处理其间有数据
//USART_RX_STA = USART1->SR;//先读SR,然后读DR才能清除
       //USART_RX_STA = USART1->DR;
  DATA_LEN=SENDBUFF_SIZE-DMA_GetCurrDataCounter(DMA1_Channel5); 
if(DATA_LEN > 0)
       {
while(USART2_TX_Finish==0)//等待数据传输完成才下一次
           {
               ;
           }  
//将数据送DMA存储地址
           for(i=0;i<DATA_LEN;i++)
           {
               USART2_SEND_DATA[i]=USART1_RECEIVE_DATA[i];
           }
           //USART用DMA传输替代查询方式发送,克服被高优先级中断而产生丢帧现象。
           DMA_Cmd(DMA1_Channel7, DISABLE); //改变datasize前先要禁止通道工作
           DMA1_Channel7->CNDTR=DATA_LEN; //DMA1,传输数据量       
USART2_TX_Finish=0;
           DMA_Cmd(DMA1_Channel7, ENABLE);
}
//DMA_Cmd(DMA1_Channel5, DISABLE);//关闭DMA,防止处理其间有数据
DMA_ClearFlag(DMA1_FLAG_GL5 | DMA1_FLAG_TC5 | DMA1_FLAG_TE5 | DMA1_FLAG_HT5);//清标志
DMA1_Channel5->CNDTR = SENDBUFF_SIZE;//重装填  512
DMA_Cmd(DMA1_Channel5, ENABLE);//处理完,重开DMA
//读SR后读DR清除Idle
i = USART1->SR;
i = USART1->DR;
}
if(USART_GetITStatus(USART1, USART_IT_PE | USART_IT_FE | USART_IT_NE) != RESET)//出错
{
USART_ClearITPendingBit(USART1, USART_IT_PE | USART_IT_FE | USART_IT_NE);
}
  USART_ClearITPendingBit(USART1, USART_IT_TC);
  USART_ClearITPendingBit(USART1, USART_IT_IDLE);

}

 

串口2中断

void USART2_IRQHandler(void)
{
u16 DATA_LEN;
u16 i;


if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET) //如果为空闲总线中断
   {
    DMA_Cmd(DMA1_Channel6, DISABLE);//关闭DMA,防止处理其间有数据
//USART_RX_STA = USART1->SR;//先读SR,然后读DR才能清除
       //USART_RX_STA = USART1->DR;
  DATA_LEN=SENDBUFF_SIZE-DMA_GetCurrDataCounter(DMA1_Channel6); 
if(DATA_LEN > 0)
       {
while(USART1_TX_Finish==0)//等待数据完成才下一次
           {
               ;
           }
//将数据送DMA存储地址
           for(i=0;i<DATA_LEN;i++)
           {
               USART1_SEND_DATA[i]=USART2_RECEIVE_DATA[i];
           }   
           //USART用DMA传输替代查询方式发送,克服被高优先级中断而产生丢帧现象。
           DMA_Cmd(DMA1_Channel4, DISABLE); //改变datasize前先要禁止通道工作
           DMA1_Channel4->CNDTR=DATA_LEN; //DMA1,传输数据量      
USART1_TX_Finish=0;
           DMA_Cmd(DMA1_Channel4, ENABLE);
}
//DMA_Cmd(DMA1_Channel5, DISABLE);//关闭DMA,防止处理其间有数据
DMA_ClearFlag(DMA1_FLAG_GL6 | DMA1_FLAG_TC6 | DMA1_FLAG_TE6 | DMA1_FLAG_HT6);//清标志
DMA1_Channel6->CNDTR = SENDBUFF_SIZE;//重装填   512
DMA_Cmd(DMA1_Channel6, ENABLE);//处理完,重开DMA
//读SR后读DR清除Idle
i = USART2->SR;
i = USART2->DR;
}
if(USART_GetITStatus(USART2, USART_IT_PE | USART_IT_FE | USART_IT_NE) != RESET)//出错
{
USART_ClearITPendingBit(USART2, USART_IT_PE | USART_IT_FE | USART_IT_NE);
}
  USART_ClearITPendingBit(USART2, USART_IT_TC);
  USART_ClearITPendingBit(USART2, USART_IT_IDLE);


}

最近在CUBE实现了此功能,比老版本的库方便了许多。程序代码:https://download.csdn.net/download/longkousong/10809675

http://www.lbrq.cn/news/1270513.html

相关文章:

  • 南昌做网站建设哪家好/b2b免费发布信息平台
  • 手机程序编程/外贸seo是什么意思
  • 平面设计能干到老吗/武汉建站优化厂家
  • 一个旅游网站建设需求分析/苏州排名搜索优化
  • 网站建设案例步骤/关键词优化技巧有哪些
  • 手机免费创网站/企业网站建设的基本流程
  • 网站建设云梦/泰安seo推广
  • 绵阳专门做网站的公司有哪些/杭州关键词优化平台
  • 关于asp网站模板下载/有没有免费的写文案的软件
  • 安阳网站制作/网络营销最新案例
  • 外贸建站是什么意思/广州seo公司排行
  • wordpress建立视频网站/东莞网站建设方案外包
  • 郑州网站推广¥做下拉去118cr/3000行业关键词
  • 怎么让人搜索到自己做的网站/成都网站建设方案推广
  • 上海做产地证在哪个网站录入/网站建站开发
  • 用腾讯云做网站的好处/大连网站seo
  • 网站开发包含网页设计吗/百度学术官网入口
  • 做关于星空的网站/某企业网站的分析优化与推广
  • 信誉好的网站建设公司/济南seo顾问
  • 做行政关注什么类型的网站/网上教育培训机构哪家好
  • 宿迁建设企业网站/做直销去哪里找客户
  • 如何做网站内链/优化seo排名
  • 网站头像设计免费制作/深圳网络推广的公司
  • 满满正能量网站/专门开发小程序的公司
  • 个人网站备案 备注/大丰seo排名
  • 无锡定制网站制作公司/百度搜索指数在线查询
  • 保密和档案网站建设方案/中国舆情网
  • 网页设计与网站建设步骤/百度一下京东
  • 网站建设功能描述书/站长工具seo优化系统
  • 网站ftp根目录/今天重大新闻国内最新消息
  • Kafka——关于Kafka动态配置
  • InfluxDB 与 Node.js 框架:Express 集成方案(二)
  • 【Django】-6- 登录用户身份鉴权
  • 深度学习-模型初始化与模型构造
  • 从零到英雄:掌握神经网络的完整指南
  • 使用 whisper, 音频分割, 整理需求 2