6.串口、时钟

news2024/11/24 20:25:12

预备知识

  1. CC2530在正常运行的时候需要一个高频时钟信号和一个低频的时钟信号

    高频时钟信号,主要供给CPU,保证程序的运行。

    低频时钟信号,主要供给看门狗、睡眠定时器等偏上外设。

  2. CC2530时钟信号的来源:

    • 高频信号有2个,芯片内部的16M RC电路;外接的32M石英晶振

    • 低频信号也有2个来源,芯片内部的32K RC电路,外接的32.768K石英晶振。

  3. CC2530芯片默认上电的时候,是内部的2个RC电路作为高频和低频的时钟来源。

    • 如果使用串口,特别是无线通信的时候,必须要用32M的石英晶振作为高频时钟来源。
  4. 高频时钟源特点:

    • 2高频时钟源可以同时起振产生高频时钟信号;

    • 2个低频时钟源,某一时刻只能有1个起振,并且起振的这个时钟源供给CC2530.

系统时钟转换

系统高频时钟源切换的步骤:

  1. 让2个高频时钟源起振(SLEEPCMD)

  2. 等待目标时钟源振荡稳定(SLEEPSTA )

  3. 延时一小段时间63us

  4. 不分频输出(CLKCONCMD )

  5. 选中目标高频时钟源作为系统主时钟(CLKCONCMD )

  6. 确认一下当前工作的系统时钟是不是所选的高频时钟(CLKCONSTA)

配置实现

1、让SLEEPCMD的第2位为0;

2、SLEEPSTA寄存器的第6位为1表示32M 时钟源稳定

3、超过63微秒延时

4、把寄存器CLKCONCMD的低3位 设置为000,表示不分频输出

5、把寄存器CLKCONCMD的第6位 清0,设置32M作为系统主时钟

6、如果读CLKCONSTA这个寄存器的第6位为0,表示32M的时钟源已经作为了当前的系统主时钟,程序可以往下运行了。

void Init32M()
{
   SLEEPCMD &= 0xFB;//1111 1011 开启2个高频时钟源
   while(0==(SLEEPSTA & 0x40));// 0100 0000 等待32M稳定
   delayus();
   CLKCONCMD &= 0xF8;//1111 1000 不分频输出
   CLKCONCMD &= 0XBF;//1011 1111 设置32M作为系统主时钟
   while(CLKCONSTA & 0x40); //0100 0000 等待32M成功成为当前系统主时钟
}

相关寄存器

SLEEPCMD寄存器

image-20231014110046294

SLEEPSTA寄存器

image-20231014110331259

CLKCONCMD寄存器

系统时钟的源既可以用 16 MHzRC 振荡器,也可以采用 32 MHz晶振。时钟的控制使用CLKCONCMD寄存器执行

PCON.IDLE在默认状态下处于供电模式

如果当进入供电模式(设置 PCON.IDLE)且 CLKCONCMD.OSC = 0 时,自动变为 32 MHz。

如果当进入供电模式设置了 PCON.IDLE 且 CLKCONCMD.OSC = 1,它继续运行在 16 MHz。

image-20231014110623799

CLKCONSTA寄存器

CLKCONSTA 寄存器是一个只读的寄存器,用于获得当前时钟状态

image-20231014111105250

串口通信

配置实现

初始化配置:

  1. 指定串口的IO位置;

  2. 相应IO配置成偏上外设功能:

  3. 8个数据位、1个停止位、无流控、无校验确立。

  4. 波特率:

  5. 开CPU中断、对应串口接收中断:

中断配置:

  1. 清除接收中断标志位
  2. 接收数据
  3. 等待发送完成
  4. 清除发送完成标志位
void USART_Init(){
  //串口0的备用位置1配置成波特率9600
  PERCFG &= 0xFE;       //1111 1110 选中串口0的的备用位置1

  P0SEL  |= 0x0C;       //0000 1100 P0_2 p0_3为片上外设功能
  
  U0CSR |= 0Xc0;
  
  U0GCR = 8;
  U0BAUD= 59;

  EA = 1;
  URX0IE = 1;
}

#pragma vector=URX0_VECTOR
__interrupt void USART0_INT(void)
{
    
    URX0IF=0;//串口0来数据的标志位,硬件会置1,我们软件要清0
    ch=U0DBUF;//从接受寄存器里取字节存入变量ch
    
    U0DBUF=ch;//把变量ch里的值赋给串口0发送数据寄存器
    while(0==UTX0IF);//等待发送完成
    UTX0IF=0;//发送完成标志位,硬件置1,软件清0
}

相关寄存器

引脚映射

image-20231014113243742

image-20231014113433811

PERCFG寄存器

image-20231014113548563

U0CSR寄存器

U0CSR是USART0控制和状态寄存器,其各个位的作用如下:

(1)Bit[7]表示USART模式,值为0表示SPI模式,值为1表示UART模式。

(2)Bit[6]表示是否启用UART接收器,值为0表示禁用接收器,值为1表示启动接收器。

(3)Bit[5]表示SPI 主机或者从机模式,值为0表示SPI主模式,值为1表示SPI从模式。

(4)Bit[4]表示UART 帧的停止位错误状态,值为0表示无错误,值为1表示有错误。

(5)Bit[3]表示UART奇偶错误状态,值为0无错误,值为1表示有错误。

(6)Bit[2]表示传送字节状态,值为0表示没有收到字节,值为1表示准备好接收字节。

(7)Bit[1]表示传送字节状态,值为0表示字节没有被传送,值为1表示写到数据缓存寄存器的最后字节被传送。

(8)Bit[0],USART传送/接收主动状态、在 SPI 从模式下该位等于从模式选择,0:USART 空闲 ,1:USART 忙碌。

image-20231014114722135

波特率配置

image-20231014114757525

IEN0中断使能寄存器

image-20231014115155885

其他中断相关寄存器

URX0IF是串口0 RX中断标志寄存器,1用于USART0接收中断标志位。

image-20231014115710010

UTX0IF是USART0的TX中断标志标志寄存器,值为0表示无中断未决,值为1表示中断未决。

image-20231014115651003

U0DBUF是USART0的缓存寄存器,用于接收或发送数据时的缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1093511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】:初阶模板

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…

Stirling-PDF:一款优秀的开源PDF处理工具

最近我的朋友大雄需要将一个PDF转换为Word文档。于是他在网上尝试了多个PDF转换的在线工具,但要么需要会员,要么需要登录等繁琐操作,而且我们的文件也存在泄漏等安全隐患。因此,他向我咨询是否有可私有化部署且易于使用的PDF在线工…

字符函数和字符串函数2(C语言进阶)

字符函数和字符串函数2 三.长度受限制的字符串函数介绍1.strncpy2.strncat3.strncmp 四.字符串查找1.strstr2.strtok 五.错误信息报告1.strerror 六.字符操作七.内存操作函数1.memcpy2.memmove3.memset4.memcmp 三.长度受限制的字符串函数介绍 1.strncpy char * strncpy ( ch…

8.简易无线通信

预备知识 Zigbee无线通信,需要高频的载波来提供发射效率,Zigbee模块之间要可以正常的收发,接收模块必须把接收频率设置和发射模块的载波频率一致。Zigbee有27个载波可以进行通信,载波叫做信道(无线通信的通道&#xf…

UE4 EQS环境查询 学习笔记

EQS环境查询对应Actor的范围 EQS环境查询查询对应的类 查询到即有一个蓝色的球在Actor上,里面有位置信息等等 在行为树运行EQS,按键(‘)可以看到Player的位置已经被标记 运行对应的EQS在这里放如EQS就可以了 Generated Point&…

2023年中国分布式光纤传感产量、需求量及行业市场规模分析[图]

分布式光纤传感器中的光纤能够集传感、传输功能于一体,能够完成在整条光纤长度上环境参量的空间、时间多维连续测量,具有结构简单、易于布设、性价比高、易实现长距离等独特优点,常用的分布式光纤传感器有光时域反射仪、布里渊分析仪、喇曼反…

【AI视野·今日Robot 机器人论文速览 第五十四期】Fri, 13 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 13 Oct 2023 Totally 45 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚AI与机器人安全, 从攻击界面、伦理法律和人机交互层面进行了论述。(from 密西西比大学) 📚机器人与图机器学…

Windows端口号被占用的查看方法及解决办法

Windows端口号被占用的查看方法及解决办法 Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2023-10-14 22:58:32.069 ERROR 6488 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***…

Qt 布局(QLayout 类QStackedWidget 类) 总结

一、QLayout类(基本布局) QLayout类是Qt框架中用于管理和排列QWidget控件的布局类。它提供了一种方便而灵活的方式来自动布局QWidget控件。QLayout类允许您以一种简单的方式指定如何安排控件,并能够自动处理控件的位置和大小,以使其适应更改的父窗口的大…

【HCIA】静态路由综合实验

实验要求: 1、R6为ISP,接口IP地址均为公有地址,该设备只能配置IP地址之后不能再对其进行任何配置 2、R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配 3、R1、R2、R4,各有两个环回IP地址;R5,R6各有一…

基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结

作者:许成铭(竞霄) 数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的 SLA 数字&#xff0c…

MyBatis的缓存,一级缓存,二级缓存

10、MyBatis的缓存 10.1、MyBatis的一级缓存 一级缓存是SqlSession级别的,通过同一个SqlSession对象 查询的结果数据会被缓存,下次执行相同的查询语句,就 会从缓存中(缓存在内存里)直接获取,不会重新访问…

c++string类的赋值问题

来看问题: 为什么呢?是因为定义string a""时候a没有占用空间,所以没有a[0],a[1],a[3]。如果说string a"hhhhhh",那么图中a[0],a[1],a[3]就有效了。正确的做法是用连接,或者是定义时写成string a(6…

爬虫 | 正则、Xpath、BeautifulSoup示例学习

文章目录 📚import requests📚import re📚from lxml import etree📚from bs4 import BeautifulSoup📚小结 契机是课程项目需要爬取一份数据,于是在CSDN搜了搜相关的教程。在博主【朦胧的雨梦】主页学到很多…

vsc连接wsl安装vsc时遇到权限问题的解决方案

当点击左下角的连接 遇到下面的权限提示时 mkdir: cannot create directory ‘/home/xxx(用户名)/.vscode-server’: Permission denied 可以新建文件 /etc/wsl.conf,并拷贝如下内容 # Automatically mount Windows drive when the distribution is launched [aut…

面试总结之Java基础

1、反射 1.1、概述 反射:加载类(通过反射将类的字节码文件加载到内存中),并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)反射需要掌握的内容: 1)记载类&#xf…

实习项目遇到的bug

问题1: 大概是因为没设置ts类型,它查不到的问题,不定义的话加上问号,加上可选链就不会报错了 {{bizEquipmentInfo.lastUnlockingVO?.lastUnlockingTime.replace(T, )? bizEquipmentInfo.lastUnlockingVO?.lastUnlockingTime.r…

通讯网关软件024——利用CommGate X2Access实现Modbus TCP数据转储Access

本文介绍利用CommGate X2ACCESS实现从Modbus TCP设备读取数据并转储至ACCESS数据库。CommGate X2ACCESS是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,实现从Modbus TCP设备读取数据并转储…

【EventLoop】问题一次搞定

📍 JS的事件循环机制恐怕是大多数前端开发者头顶上的一座大山之一,最近通过拜读两篇文档,对eventloop进行了深刻的理解;通过这篇文档对要点进行总结; article1: 波神的这篇eventLoop文章适合反复重温&…

Ubuntu22安装Docker engine(apt安装方式)

一、准备工作 新创建一个虚拟机。 进入虚拟机: 二、安装docker docker现在对用不同主机提供了不同安装包:docker engine 和 docker desktop。 docker desktop适用于图形化的桌面电脑,docker engine适用于服务器。我们这里当然是安装docker…