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

html5 php网站源码下载专业建设思路与措施

html5 php网站源码下载,专业建设思路与措施,公司网站建设费用入什么费用,舟山网站建设企业一、概述 本文主要介绍如何配置USART接收中断,使用乒乓缓存的设计接收数据并将其回显在PC 串口工具上。以stm32f10为例,配置USART1 9600波特率。具体配置参考上一章节STM32 寄存器配置笔记——USART配置 打印。 乒乓缓存的设计应用场景:当后面…

一、概述

       本文主要介绍如何配置USART接收中断,使用乒乓缓存的设计接收数据并将其回显在PC 串口工具上。以stm32f10为例,配置USART1 9600波特率。具体配置参考上一章节STM32 寄存器配置笔记——USART配置 打印。

        乒乓缓存的设计应用场景:当后面的处理单元在工作期间,前面的 buffer 的内容不能被释放。或者,在处理单元工作期间, buffer 的特定地址的内容不止被访问一次。优点是相比全部写完再读的方式,可以节约读写时序。

二、中断优先级


       STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。即抢占优先级和响应优先级。

抢占
抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A),抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。

响应
响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中断, 响应属性由NVIC_IRQChannelSubPriority 参数配置。
 

二、配置流程

        1)使能RXNE中断

        接收缓冲区非空中断使能,通过MY_NVIC_init函数配置中断的抢占优先级和响应优先级为3(这里可以随意配置本章重点不在这)。最后一个参数表示分组为2。即有2位用来表示抢占优先级,2位用来表示响应优先级。

    USART1->CR1 |= 1 << 5;                                // enable RXNE interrupt MY_NVIC_Init(3,3,USART1_IRQn,2);                      // 2bit PreemptionPriority 3 2bit SubPriority 3

        2)编写串口中断函数

        USART1_IRQHandler是在启动文件里定义的只要有串口中断便会跑进来。查询状态寄存器USART_SR的RXNE位为1则表示收到数据可以读出。此时从USART_DR寄存器读取数据。

      三、乒乓缓存设计

         1)数据结构定义

typedef struct
{u8 USART_RX_BUF[USART_REC_LEN];u16 len;
} USART_DATA;typedef struct
{USART_DATA stUartFifo[2];u8 curRecFifo;
} USART_HANDLE;static USART_DATA *p_cur_Usart1_Handle = NULL;
static USART_DATA *p_cur_Data_ProcessingHandle = NULL;
static USART_HANDLE g_Usart1Handle;uin16 needPro = 0;

        2)乒乓缓存初始化 

void init_usart_handle(void)
{memset((u8*)&g_Usart1Handle, 0, sizeof(USART_HANDLE));p_cur_Usart1_Handle = &g_Usart1Handle.stUartFifo[0];
}

        3)乒乓缓存接收

void USART1_IRQHandler(void)
{if(USART1->SR&(1<<5)){p_cur_Usart1_Handle->USART_RX_BUF[p_cur_Usart1_Handle->len++] = USART1->DR;}
}

         4)乒乓缓存切换

        这里是以每收到一帧完整帧的数据都是以0x0d 0x0a结尾的数据为例。收到一帧完整帧将当前乒乓缓存A切换为处理,乒乓缓存B切换为接收。

void change_curFifo(void)
{u16 len = p_cur_Usart1_Handle->len;if (len >= 2){if (p_cur_Usart1_Handle->USART_RX_BUF[len - 2] == 0x0d && p_cur_Usart1_Handle->USART_RX_BUF[len - 1] == 0x0a){printf("curFifo:%d len:%d\r\n", g_Usart1Handle.curRecFifo, len);p_cur_Data_ProcessingHandle = p_cur_Usart1_Handle;g_Usart1Handle.curRecFifo++;p_cur_Usart1_Handle = &g_Usart1Handle.stUartFifo[g_Usart1Handle.curRecFifo % 2];p_cur_Usart1_Handle->len = 0;needPro = 1;}}
}

        5)乒乓缓存处理

        打印接收内容。

void data_processing(void)
{if (needPro){needPro = 0;p_cur_Data_ProcessingHandle->USART_RX_BUF[p_cur_Data_ProcessingHandle->len] = 0;printf("func:%s dat:%s\r\n", __func__, p_cur_Data_ProcessingHandle->USART_RX_BUF);}
}

      6)调用如下

      主循环一直轮询是否需要切换乒乓缓存以及是否存在数据待处理。

http://www.yayakq.cn/news/562215/

相关文章:

  • 福州制作公司网站企业网站排名提升软件能优化
  • 网站建设有哪些项目设计师之家数字图书馆
  • 查看网站速度wordpress 表单录入
  • 电子商务网站建设与管理课程心得平面设计主要学什么内容
  • 石家庄免费做网站中山 家居 骏域网站建设专家
  • 青岛做网站建网站服装设计公司的名字
  • 黄页88网站推广效果东莞网站定制
  • js 访问网站统计刷新不增加次数抖音宣传推广方案
  • php做简单网站例子简单企业网站模板免费
  • 博客wordpress怎么编辑宁波网站建设优化服务公司
  • 网站首页特效用帝国做网站好做吗
  • 网站建设怎么建新网站建设市场
  • 免费自助建站模板网站规划与建设进度怎么写
  • 齐齐哈尔城市建设档案馆网站现在什么网站做基础销量好
  • 做影视网站风险大吗安卓开发环境
  • 营销型网站建设的主要流程包括上海嘉定网站设计
  • 网约车后台平台网站建设二级域名有哪些
  • 网站空间续费泉州 网站建设
  • 聚美优品网站建设的目标专业的建站公司推广
  • 网站定位模板传统营销方式有哪些
  • 上海大型网站设计公司网红营销网站
  • 怎么开发一个自己的网站新媒体网页设计
  • 普陀网站建设哪家好用三权重的网站做友链有好处没
  • 南沙规划建设局网站百度推广自己做网站
  • php网站建设制作流程做国际贸易用什么网站
  • 网站栏目在哪里企业中英文网站开发
  • 17一起做网站后台wordpress嵌入视频播放
  • 复旦大学精品课程网站微信公众号关注
  • 网站开发主管岗位职责建设方案模板范文
  • 快速网站开发工具球类网站如何做宣传