【CRR学习笔记】Websocket简介

WebSocket协议解决了HTTP协议的单向请求问题,实现了服务器主动向客户端推送信息。它具有低延迟、高效率、跨域通信等优点,广泛应用于实时通信场景,如社交订阅、多玩家游戏、协同编辑、股票基金报价、体育实况更新、多媒体聊天和基于位置的应用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTML方面:

1,Websocket介绍,及其优点,应用

参考自:http://www.ruanyifeng.com/blog/2017/05/websocket.html

HTTP协议有一个缺点,单向请求。

通信只能由客户端发起,做不到服务器主动向客户端推送信息;如果要解决这个问题,就需要使用轮询,每隔一段时间就向服务器发送一个请求,询问是否有新消息。典型场景是聊天室。

WebSocket因此而诞生,最大特点就是服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,实现真正的双向通讯。

其他特点有:

(1)建立在TCP协议上,服务端实现比较容易;

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制(协议(http,https),域名(//后面的名字)、端口(默认80,可以81)),客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

ws://example.com:80/some/path

应用场景:

1.社交订阅

对社交类的应用的一个裨益之处就是能够即时的知道你的朋友正在做什么。虽然听起来有点可怕,但是我们都喜欢这样做。你不会想要在数分钟之后才能知道一个家庭成员在馅饼制作大赛获胜或者一个朋友订婚的消息。你是在线的,所以你的订阅的更新应该是实时的。

2.多玩家游戏

网络正在迅速转变为游戏平台。在不使用插件(我指的是Flash)的情况下,网络开发者现在可以在浏览器中实现和体验高性能的游戏。无论你是在处理DOM元素、CSS动画,HTML5的canvas或者尝试使用WebGL,玩家之间的互动效率是至关重要的。我不想在我扣动扳机之后,我的对手却已经移动位置。

3.协同编辑/编程

我们生活在分布式开发团队的时代。平时使用一个文档的副本就满足工作需求了,但是你最终需要有一个方式来合并所有的编辑副本。版本控制系统,比如Git能够帮助处理某些文件,但是当Git发现一个它不能解决的冲突时,你仍然需要去跟踪人们的修改历史。通过一个协同解决方案,比如WebSocket,我们能够工作在同一个文档,从而省去所有的合并版本。这样会很容易看出谁在编辑什么或者你在和谁同时在修改文档的同一部分。

4.点击流数据

分析用户与你网站的互动是提升你的网站的关键。HTTP的开销让我们只能优先考虑和收集最重要的数据部分。然后,经过六个月的线下分析,我们意识到我们应该收集一个不同的判断标准——一个看起来不是那么重要但是现在却影响了一个关键的决定。与HTTP请求的开销方式相比,使用Websocket,你可以由客户端发送不受限制的数据。想要在除页面加载之外跟踪鼠标的移动?只需要通过WebSocket连接发送这些数据到服务器,并存储在你喜欢的NoSQL数据库中就可以了(MongoDB是适合记录这样的事件的)。现在你可以通过回放用户在页面的动作来清楚的知道发生了什么。

5.股票基金报价

金融界瞬息万变——几乎是每毫秒都在变化。我们人类的大脑不能持续以那样的速度处理那么多的数据,所以我们写了一些算法来帮我们处理这些事情。虽然你不一定是在处理高频的交易,但是,过时的信息也只能导致损失。当你有一个显示盘来跟踪你感兴趣的公司时,你肯定想要随时知道他们的价值,而不是10秒前的数据。使用WebSocket可以流式更新这些数据变化而不需要等待。

6.体育实况更新

现在我们开始讨论一个让人们激情澎湃的愚蠢的东西——体育。我不是运动爱好者,但是我知道运动迷们想要什么。当爱国者在打比赛的时候,我的妹夫将会沉浸于这场比赛中而不能自拔。那是一种疯狂痴迷的状态,完全发自内心的。我虽然不理解这个,但是我敬佩他们与运动之间的这种强烈的联系,所以,最后我能做的就是给他的体验中降低延迟。如果你在你的网站应用中包含了体育新闻,WebSocket能够助力你的用户获得实时的更新。

7.多媒体聊天

视频会议并不能代替和真人相见,但当你不能在同一个屋子里见到你谈话的对象时,视频会议是个不错的选择。尽管视频会议私有化做的“不错”,但其使用还是很繁琐。我可是开放式网络的粉丝,所以用WebSockets getUserMedia API和HTML5音视频元素明显是个不错的选择。WebRTC的出现顺理成章的成为我刚才概括的组合体,它看起来很有希望,但其缺乏目前浏览器的支持,所以就取消了它成为候选人的资格。

8.基于位置的应用

越来越多的开发者借用移动设备的GPS功能来实现他们基于位置的网络应用。如果你一直记录用户的位置(比如运行应用来记录运动轨迹),你可以收集到更加细致化的数据。如果你想实时的更新网络数据仪表盘(可以说是一个监视运动员的教练),HTTP协议显得有些笨拙。借用WebSocket TCP链接可以让数据飞起来。

9.在线教育

上学花费越来越贵了,但互联网变得更快和更便宜。在线教育是学习的不错方式,尤其是你可以和老师以及其他同学一起交流。很自然,WebSockets是个不错的选择,可以多媒体聊天、文字聊天以及其它优势如与别人合作一起在公共数字黑板上画画...

 

 

<think>好的,我现在需要回答用户关于CRR定义以及计数器频率计算的问题。首先,我得回顾之前的对话和用户提供的引用内容,确保回答准确。用户提到了CRR可能与计数器计数频率相关,并且引用了几个关于STM32定时器的内容,特别是PWM和输入捕获相关的部分。 首先,CRR在用户提供的引用中多次出现,比如引用[1]提到占空比等于CRR/(ARR+1),引用[3]说明CNT计数与CRR比较产生PWM变化。这提示CRR可能指的是捕获/比较寄存器(Capture/Compare Register),通常在STM32中,这对应的是CCR寄存器,可能用户在这里有拼写错误,将CCR写成了CRR。需要确认这一点,但根据上下文,应该是CCR。 接下来,用户想了解CRR的定义以及如何计算计数器频率。根据之前的回答,定时器的频率计算涉及PSC和ARR,而CCR用于控制PWM的占空比。我需要解释CCR的作用,并澄清可能的拼写错误。同时,需要将CCR与计数器频率的关系讲清楚,即CCR本身不影响定时器的基础频率,但影响输出信号的占空比。 用户可能混淆了CRR和CCR,所以在回答中需要指出这一点,并解释正确的术语。同时,引用中的例子如引用[3]提到的CNT与CRR比较,进一步支持CCR作为比较寄存器的角色。此外,引用[4]中的输入捕获函数使用了TIM_GetCapture1,这也与CCR寄存器相关,用于读取捕获值。 在计数器频率计算方面,需要重申核心公式,即F_timer = F_clock / [(PSC+1)(ARR+1)],并说明CCR不直接参与频率计算,而是影响占空比。同时,可以引用用户提供的引用[1]中的内容,说明当ARR固定时,通过调整PSC来改变频率而不影响占空比,这进一步说明CCR的作用独立于频率设置。 此外,用户的问题可能涉及到如何通过CCR调整占空比,需要举例说明,比如当ARR固定为999时,CCR设置为500则占空比为50%。同时,引用[3]中的代码示例可以辅助说明这一点。 需要检查是否有其他可能的CRR定义,但根据STM32的常用术语,应该是CCR。因此,在回答中需要明确这一点,避免用户混淆。同时,确保回答结构清晰,分点解释,帮助用户逐步理解CRR的定义和计数器频率的计算方法。 最后,用户可能还想知道如何在实际代码中设置CCR,比如使用标准库或HAL库的函数,可以简要提及,如TIM_SetCompare1或HAL_TIM_PWM_Start等,并参考之前提供的代码对比表格。同时,生成的相关问题要围绕CCR的应用、频率计算的高级技巧等,帮助用户深入理解。</think>### CRR定义与计数器频率计算解析 --- #### 一、CRR的准确定义 **CRR** 实际为 **CCR(Capture/Compare Register)** 的笔误,中文译为 **捕获/比较寄存器**,是定时器中用于控制 **信号边沿触发** 或 **PWM占空比** 的核心寄存器[^1][^3]。其作用如下: 1. **比较模式**:当计数器值(CNT)等于CCR值时,触发电平翻转或中断 2. **捕获模式**:记录外部信号边沿到来时的CNT值 3. **PWM控制**:通过CCR与ARR的比值确定占空比 --- #### 二、CCR与计数器频率的关系 **关键结论**: **CCR不直接影响定时器频率**,频率由$PSC$和$ARR$共同决定。但CCR通过占空比间接影响输出信号形态。 **公式关系**: - **定时器基础频率**: $$ F_{\text{timer}} = \frac{F_{\text{clock}}}{(PSC + 1) \times (ARR + 1)} $$ - **PWM占空比**: $$ \text{占空比} = \frac{CCR}{ARR + 1} \times 100\% $$ **示例**: 若$ARR=999$,$CCR=500$,则占空比为$50\%$,但定时器频率仍由$PSC$和$ARR$计算得出[^1][^3]。 --- #### 三、计数器频率计算实战 ##### 场景:使用STM32定时器生成1kHz PWM 1. **参数选择**: - 时钟源$F_{\text{clock}}=72\text{MHz}$ - 固定$ARR=999$(周期$T=1\text{ms}$) - 计算$PSC$: $$ PSC = \frac{72\text{MHz}}{1\text{kHz} \times (999 + 1)} - 1 = 71 $$ - 占空比通过调整$CCR$实现,例如$CCR=300$对应$30\%$占空比 2. **代码实现**(HAL库): ```c htim3.Init.Prescaler = 71; // PSC=71 htim3.Init.Period = 999; // ARR=999 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 300); // CCR=300 ``` --- #### 四、CCR的特殊应用场景 1. **输入捕获测频** 当定时器工作在输入捕获模式时,CCR记录两次边沿触发时的CNT值差$N$,信号频率为: $$ F_{\text{信号}} = \frac{F_{\text{分频}}}{N} $$ **示例**:若$F_{\text{分频}}=1\text{MHz}$,捕获值$N=2000$,则信号频率为$500\text{Hz}$[^4]。 2. **PWM输入模式(PWMI)** 同时使用两个CCR寄存器分别捕获周期和脉宽,实现占空比测量: $$ \text{占空比} = \frac{CCR2}{CCR1} \times 100\% $$ (需配合定时器级联配置) --- #### 五、设计误区修正 1. **CCR与ARR混淆** - **错误操作**:通过修改ARR调整占空比 - **后果**:同时改变频率和占空比,导致系统失控[^1] - **正确做法**:固定ARR,仅调整CCR 2. **计数器溢出忽略** - **错误示例**:假设$CCR > ARR$时仍有效 - **实际行为**:当$CCR > ARR$时,占空比恒为$100\%$ --- ### 扩展应用 | 应用场景 | CCR配置要点 | |----------------|----------------------------------------------------------------------------| | 多通道PWM | 每个通道独立设置CCR值,共享同一ARR和PSC | | 呼吸灯效果 | 周期性修改CCR值(需配合DMA或定时器中断) | | 编码器接口 | 使用两个CCR记录A/B相边沿,计算转速 | --- ### 相关问题 1. 如何通过CCR实现PWM信号的动态调光? 2. 输入捕获模式下如何避免CNT溢出导致的测量误差? 3. 多定时器同步时CCR如何配置? 4. 在中心对齐模式下CCR的比较逻辑有何变化? [^1]: PWM频率与占空比控制逻辑 [^2]: 输入捕获模式下的频率测量原理 : 定时器比较/捕获机制详解 [^4]: PWM输入模式的高级应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值