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

网站托管公司网络推广好做吗

网站托管公司,网络推广好做吗,免费做明信片的网站,网络营销是以什么为中心文章目录 一、中断串口监听方式初始化中断处理串口监听 二、空闲中断方式三、空闲中断DMA方式四、总结 本文将详细介绍在STM32平台上实现串口接收不定长数据的几种方法 一、中断串口监听方式 这种方式也是我早期使用的方式,直接使用寄存器来操作,这种方…

文章目录

  • 一、中断+串口监听方式
  • 初始化
    • 中断处理
    • 串口监听
  • 二、空闲中断方式
  • 三、空闲中断+DMA方式
  • 四、总结

本文将详细介绍在STM32平台上实现串口接收不定长数据的几种方法

一、中断+串口监听方式

这种方式也是我早期使用的方式,直接使用寄存器来操作,这种方式效率低,开销大,还要额外开定时器监听

初始化

temp=(float)(uart_config.pclk1000000)/(uart_config.bound16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
//初始化IO
Uart_MSP_Init(Uart_Type[uart_config.uart_num]);
//初始化clk
Uart_Clk_Init(Uart_Type[uart_config.uart_num]);
//波特率设置
Uart_Type[uart_config.uart_num]->BRR=mantissa; // 波特率设置
Uart_Type[uart_config.uart_num]->CR1|=0X200C; //1位停止,无校验位.

中断处理

有数据就缓存到数组里
void USART3_IRQHandler(void)
{
uint8_t res;
if(USART3->SR&(1<<5)) //接收到数据
{
uart_lock[uart3] = 1;
res=USART3->DR;
if(Uart_RX_Data[uart3].RX_CNT<sizeof(Uart_RX_Data[uart3].RX_BUF))
{
Uart_RX_Data[uart3].RX_BUF[Uart_RX_Data[uart3].RX_CNT] = res;//缓存数据
Uart_RX_Data[uart3].RX_CNT++;//字节
}
}
}

串口监听

主要作用是监听中断是否有数据更新,超过Nms认为没有数据更新,认为这是一帧数据,Uart3RxMonitor程序需要跑在1ms更新定时器中
static void Uart3RxMonitor(uint8_t ms) //串口接收监控
{
if(uart_callback_handler[uart3] != NULL)
{
if(Uart_RX_Data[uart3].RX_CNT>0)//接收计数器大于零时,监控总线空闲时间
{
if(Uart_RX_Data[uart3].RX_BKP!=Uart_RX_Data[uart3].RX_CNT) //接收计数器改变,即刚接收到数据时,清零空闲计时
{
//uart_lock[uart3] = 1;
Uart_RX_Data[uart3].RX_BKP=Uart_RX_Data[uart3].RX_CNT; //赋值操作,将实际长度给USART1_RX_BKP
Uart_RX_Data[uart3].idletmr=0; //将监控时间清零
}
else 接收计数器未改变,即总线空闲时,累计空闲时间
{
//如果在一帧数据完成之前有超过2个字节时间的停顿,接收设备将刷新当前的消息并假定下一个字节是一个新的数据帧的开始
if(Uart_RX_Data[uart3].idletmr<2) //空闲时间小于1ms时,持续累加
{
Uart_RX_Data[uart3].idletmr +=ms;
if(Uart_RX_Data[uart3].idletmr>=2) //空闲时间达到1ms时,即判定为1帧接收完毕
{
len[uart3] = UartRead(uart3,buf[uart3],sizeof(buf[uart3]));
Uart_Buf_Def u_data;
u_data.data= buf[uart3];
u_data.len = len[uart3];
uart_callback_handleruart3;//得到一帧数据
uart_lock[uart3] = 0;
}
}
}
}
else
{
Uart_RX_Data[uart3].RX_BKP=0;
}
}
}

二、空闲中断方式

// USART1 中断服务程序 void USART1_IRQHandler(void) {
HAL_UART_IRQHandler(&huart1);
if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)
{
// 处理接收中断
uint8_t res;
HAL_UART_Receive(&huart1, &res, 1, 1000);
// 将接收到的数据添加到缓冲区,
Uart_RX_Data[uart1].RX_BUF[Uart_RX_Data[uart1].RX_CNT] = res;//缓存数据
Uart_RX_Data[uart1].RX_CNT++;//字节
}
if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET)
{
// 处理空闲中断
// 表示一帧数据接收完成,可以处理缓冲区中的数据
// 清除空闲中断标志位
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
// 处理接收到的数据,例如发送出去或进行其他处理
}
}

三、空闲中断+DMA方式

目前主要使用的是这种方式,这种方式的好处是高效,不会频繁进入 RXNE中断进行缓存减小CPU开销,DMA回自动把数据搬运到你指定的缓存区,整个数据帧传送完毕后才会产生一个idle中断
void USART1_IRQHandler(void)
{
uint32_t temp;
if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)) != RESET)//获取IDLE标志位,检查idle标志是否被置位
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除标志位
HAL_UART_DMAStop(&huart1); //
temp = __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);// 获取DMA中未传输的数据个数
temp = Usart1ReceiveLEN - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数

uart_callback_handleruart1;//一帧数据获取完成去做其他处理
HAL_UART_Receive_DMA(&huart1,Usart1_RX_Buffer,Usart1ReceiveLEN);//打开DMA接收,数据存入rx_buffer数组中。(数组重新复位)
}

四、总结

在STM32平台上实现串口接收不定长数据,可以通过不使用DMA的方式和使用DMA的方式来实现。不使用DMA的方式依赖于中断和缓冲区处理,适用于数据量不大或实时性要求不高的场景。而使用DMA的方式可以显著提高数据传输的效率,减少CPU的干预,适用于大数据量传输或需要高效率数据处理的场景。 在实际应用中,可以根据具体的需求和场景选择合适的实现方式。无论采用哪种方式,都需要对串口通信的原理和STM32的HAL库有深入的理解,才能编写出高效、稳定的代码。

http://www.15wanjia.com/news/8413.html

相关文章:

  • 哪个网站可以做担保交易平台球队积分排名
  • iis7添加网站seo关键词排名实用软件
  • 如何做企业网站小程序站长之家权重查询
  • 用vue.js做网站的好处高端大气网站建设
  • 政府部门建设网站的好处广西seo
  • 做兼职的网站 知乎软文营销代理
  • 如何将自己 做的网站发布网上网络广告投放方案
  • 新企业如何在国税网站上做套餐营销型企业网站诊断
  • dedecms图片网站模板推广网
  • 网站建设高效解决之道百度推广找谁做
  • 设计图片网站seo排名怎么样
  • 程建网seo精准培训课程
  • python可以做的网站论文培训心得简短
  • 个人网站备案需要几天谷歌关键词排名查询工具
  • 光谷做网站推广哪家好seo如何优化的
  • 网站开发报价单明细商旅平台app下载
  • 西藏做网站找谁今日新闻事件
  • 枣庄网站开发公司武汉疫情最新动态
  • 不要验证码的广告网站seo技巧优化
  • 哪个网站做加盟的比较靠谱昆明seo技术培训
  • 山东建设发展研究院网站网络营销的发展概述
  • 营销型网站建设哪家公司好seo免费自学的网站
  • 网站备案必须去做公安备案吗怎么样优化关键词排名
  • 网站建设免费代理网站提交入口链接
  • 代码素材网站哪个好一呼百应推广平台
  • 滁州seo网站推广方案久久seo正规吗
  • 网站推广www襄阳seo优化排名
  • 阿里云备案多个网站吗seo网络优化是什么意思
  • 做网站方案搜索引擎关键词优化有哪些技巧
  • 卢湾企业微信网站制作百度seo关键词工具