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

云电脑免费体验网站刚做怎么做seo优化

云电脑免费体验,网站刚做怎么做seo优化,江门官网建站公司,南阳网站推广外包文章目录 一、中断串口监听方式初始化中断处理串口监听 二、空闲中断方式三、空闲中断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/189440.html

相关文章:

  • 怎样快速提升网站权重上海网络推广优化公司
  • 设计建设网站公司做代练去什么网站安全吗
  • 赤峰浩诚网站建设有限公司企业展示网站建设需要做什么
  • wordpress网站空白域名推荐网站
  • 网站开发文件夹广东省建设安全中心网站
  • 可视化网站后台管理系统win7 iis 默认网站
  • 长沙需要做网站的企业安徽省水利厅网站 基本建设
  • 网站建设中忽略的字体违法行为上海2022进口博览会开幕式
  • 优化网站视频企业对做营销型网站有什么优势
  • 怎么样从头开始做网站找人建设一个网站多少钱
  • 网站建设的英语怎么说wordpress thepost
  • 建一个大型网站需要多少钱最专业的做音乐网站
  • 台州建设局网站企业黑名单建站展示
  • 征婚网站咋做自学网页设计的网站
  • 常州品牌网站建设网站后台如何做下载连接
  • 博罗网站建设哪家好网站源码安装
  • 做拼图字的网站pc网站和手机网站
  • wordpress主题目录分析seo做的不好的网站
  • 腾讯云 网站备案外贸网络推广培训
  • 做基网站哪些网站做的比较好看的图片
  • 网站可以分为哪些类型优购网官网
  • 应价交易系统网站开发手机网站内容管理系统
  • 网站设计公司(信科网络)学成在线网页制作
  • 佛山正规的免费建站全网营销推广有哪些平台
  • 对网站的赏析wordpress add route
  • 株洲有名的网站大连网站设计策划
  • 网站推广适合女生做吗织梦高端html5网站建设工作室网络公司网站模板
  • 怎么做门户网站设计方案怎样做网站性能优化
  • html怎么自己做网站wordpress代码风格主题
  • 品牌网站建设毛尖专门做app的网站