转:DSP28335使用FIFO的串口中断总结

2023-05-16

版权声明:本文为CSDN博主「E_ROAD_BY_U」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/E_ROAD_BY_U/article/details/53221479

一、串行通信与并行通信
DSP控制器间,DSP控制器与外部设备间交换信息,通信,可采取的通信方式主要两大类1、串行通信 2、并行通信。

并行通信一般包括多条数据线、多条控制线和状态线,传输速度快,传输线路多,硬件开销大,不适合远距离传输。一般用在系统内部,如XINTF接口或者控制器内部如DMA控制器。

串行通信则在通信线路上既传输数据信息也传输联络控制信息,硬件开销小,传输成本低,但是传输速度慢,且收发双方需要通信协议,可用于远距离通信。串行通信可以分为两大类1、同步通信 2、异步通信

同步通信:发送器和接收器通常使用同一时钟源来同步。方法是在发送器发送数据时同时包含时钟信号,接收器利用该时钟信号进行接收。典型的如I²C、SPI。

异步通信:收发双方的时钟不是同一个时钟,是由双方各自的时钟实现数据的发送和接收。但要求双方使用同一标称频率,允许有一定偏差。典型的如SCI。

二、28335SCI介绍
F28335处理器共提供3个SCI接口,相对TI的C240X系列DSP的SCI接口,功能上有很大的改进,在原有功能基础上增加了通信速率自动检测和FIFO缓冲等新的功能,为了减小串口通信时CPU的开销,F28335的串口支持16级接收和发送FIFO。也可以不使用FIFO缓冲。SCI接收器和发送器有各自独立的中断和使能位,可以独立地操作实现半双工通信,或者同时操作实现全双工通信。为了保证数据完整,SCI模块对接收到的数据进行间断、极性、超限和帧错误的检测。为了减少软件的负担,SCI采用硬件对通信数据进行极性和数据格式检查。通过对16位的波特率控制寄存器进行编程,可以配置不同的SCI通信速率。

所谓的FIFO就是先进先出的意思。SCI工作在FIFO模式下一般是因为所传输的信息并不是以一个帧为单位,而是以多个帧组成的一个包为信息单位的。比如说我的一个数据包由5个帧组成,第一个为控制字节,后四个字节共同组成一个浮点数。这时你可以设置FIFO接收中断为5个字节时产生中断。设置以后,每接收到5个字节后才会产生一次中断,而不是每接收一次产生一次中断。这样可以大幅减小CPU的开销。而先进先出的意思就是:在中断中,你读FIFO接收寄存器读到的数据是首先接收到的数据,再读一次的话读到的是接收到的第二个数据。而16深度的话就是最多能保存最近的16个接收数据,如果接收数据超过16个的话会产生相应的溢出,可以软件编程对溢出进行处理。
对于发送FIFO也是一样,你可以一次将多个数据放到发送FIFO中,然后DSP按先后顺序依次发送数据。

三、SCI模块的特点如下(通过相应的寄存器可以对这些功能进行设置)
   (1)2个外部引脚:SCITXD为SCI数据发送引脚;SCIRXD为SCI数据接收引脚。两个引脚为多功能复用引脚,如果不使用可以作为通用数字量I/O。

   (2)可编程通信速率,可以设置64K种通信速率。

   (3)数据格式:

        ◇ 1个启动位;

        ◇ 1~8位可编程数据字长度;

        ◇可选择奇校验、偶校验或无效校验位模式;

        ◇ 1或2位的停止位。

   (4)4种错误检测标志位:奇偶错误、超越错误、帧错误和间断检测。

   (5)2种唤醒多处理器方式:空闲线唤醒(Idle-line)和地址位唤醒(AddressBit)。

   (6)全双工或者半双工通信模式。

   (7)双缓冲接收和发送功能。

   (8)发送和接收可以采用中断和状态查询2种方式。

   (9)独立地发送和接收中断使能控制。

   (10)NRZ(非归零)通信格式。

   (11)13个SCI模块控制寄存器,起始地址为7050H。

   (12)自动通信速率检测(相对F140x增强的功能)。

   (13)16级发送/接收FIFO(相对F240x增强的功能)。

四、SCI主要功能单元
   (1) 1个发送器(TX)及相关寄存器。

            ◇ SCITXBUF:发送数据缓冲寄存器,存放要发送的数据(由CPU装载);


        ScicRegs.SCITXBUF=a;//向数据缓冲寄存器中写入数据即可发送该数据
            ◇ TXSHF寄存器:发送移位寄存器,从SCITXBUF寄存器接收数据,并将数据移位到SCITXD引脚上,每次移1位数据。

   (2)1个接收器(RX)及相关寄存器。

            ◇ RXSHF寄存器:接收移位寄存器,从SCIRXD引脚移入数据,每次移1位;

            ◇ SCIRXBUF:接收数据缓冲寄存器,存放CPU要读取的数据,来自远程处理器的数据装入寄存器RXSHF,然后又装入接收数据缓冲寄存器SCIRXBUF和接收仿真缓冲寄存器SCIRXEMU中。

   (3)一个可编程的波特率产生器。

   (4)数据存储器映射的控制和状态寄存器。

五、SCI寄存器

SCICCR寄存器各位的功能如图所示,可以配置SCI的发送或接收的数据长度、是否使用奇偶校验、结束位的个数等。同理可知每个寄存器的各位有不同功能,写程序的时候查找相应的寄存器即可。(其实许多东西TI已经帮我们写好了,例如有FIFO的测试函数,我们可以在别人写好的基础上进行修改,加快进度)

六、SCI发送与接收功能介绍


可编程的中断级:发送和接收FIFO都能产生CPU中断,只要发送FIFO状态位TXFFST(位12~8)与中断触发优先级TXFFIL(位4~0)相匹配,就产生一个中断触发,从而为SCI的发送和接收提供一个可编程的中断触发逻辑。

标准SCI的一个字的发送缓冲器作为发送FIFO和移位寄存器间的发送缓冲器。只有移位寄存器的最后一位被移出后,一个字的发送缓冲才从发送FIFO装载。使能FIFO后,经过一个可选择的延迟(SCIFFCT),TXSHF被直接装载而不再使用TXBUF。(与标准SCI相比,中断源变了,发送时标准的SCI是TXBUF为空)

SCI发送数据过程划线处置位与清除都是硬件自动完成的。

七、仿真结果分析
最终的程序在下面。编写的程序功能是使用FIFO中断的形式发送一个数组,数组中起始数据是5,5,5,5。先发送这些数据(注意串口接收与发送的都是字符数据,发送数字量的时候要注意转化),然后在中断中修改第四个数据为中断的次数,然后发送新的数据。第一次的执行结果如图所示,

正确结果应该是5555,5551,...,分析结果可知,似乎是在开启中断之后就产生一次串口发送中断。但是中断标志位清零的啊。(猜测是因为串口发送缓冲寄存器中此时没有数据,给理解成了发送完毕。难道需要对发送缓冲寄存器先赋值再开中断?)(测试了下,把第一次要发送的数据再启动中断之前放入了FIFO中,输出结果是正确的)

在处理上一个问题的时候,遇到的另一个问题如下:


如上,串口实验的时候为什么先禁止发送功能后面的配置就不起作用了呢?我是在最后又开启了发送功能,但是接收不到数据,如果开始的时候没有禁止发送功能就可以接收到数据。其实原因如下,

虽然最后开启发送功能了,但是最后SW RESET位确被写入了0,导致复位,所有的配置都被复位了。(由此也说明了配置寄存器的时候要小心,确定每位的功能。而且配置的时候尽量只配置你需要的那一位,其他的不要改动。用bit,不要用all)

最终的结果如图所示,达到了预期的结果。也得出当FIFO中的数据全部发送完毕才会产生中断。


八、总结
实现一个功能的时候首先查看相关的资料,例如数据手册,论坛、百度、书籍等,搜集各种相关资料,然后看别人是如何实现的,分析下相关步骤,理清好思路。针对不懂的地方继续查找资料,层层递进。(如果想省事,可以在别人正确代码的基础上进行修改,看他配置了什么寄存器,实现了什么功能,然后根据自己的需求,查看数据手册重新配置),实现的时候可以一个个小功能的实现,遇到疑惑的除求助外,也可试着观察不同的情况下会出现什么结果。总之就是多搜,多想,多动手,多总结。

#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define SCIB 0
#define SCIC 1
// Prototype statements for functions found within this file.
void scic_fifo_init(void);
void scic_xmit(int a);
interrupt void uart_send(void);
 
// Global counts used in this example
Uint16 isrCount=0;
Uint16 ErrorCount=0;
Uint16 sdata[4]={5,5,5,5};//要发送的数据
void main(void)
{
    Uint16 i=0;
// Step 1. Initialize System Control registers, PLL, WatchDog, Clocks to default state:
// This function is found in the DSP2833x_SysCtrl.c file.
    InitSysCtrl();
 
// Step 2. Select GPIO for the device or for the specific application:
// This function is found in the DSP2833x_Gpio.c file.
// InitGpio(); skip this as this is example selects the I/O
// for SCI-A in this file itself
   InitSciGpio();
 
// Step 3. Initialize PIE vector table:
// The PIE vector table is initialized with pointers to shell Interrupt
// Service Routines (ISR).  The shell routines are found in DSP2833x_DefaultIsr.c.
// Insert user specific ISR code in the appropriate shell ISR routine in
// the DSP28_DefaultIsr.c file.
 
// Disable and clear all CPU interrupts:
    DINT;
    IER = 0x0000;
    IFR = 0x0000;
 
      // Initialize Pie Control Registers To Default State:
      // This function is found in the DSP2833x_PieCtrl.c file.
      // InitPieCtrl();  PIE is not used for this example
 
      // Initialize the PIE Vector Table To a Known State:
      // This function is found in DSP2833x_PieVect.c.
      // This function populates the PIE vector table with pointers
      // to the shell ISR functions found in DSP2833x_DefaultIsr.c.
      InitPieVectTable();
 
      // Enable CPU and PIE interrupts
      // This example function is found in the DSP2833x_PieCtrl.c file.
      EnableInterrupts();
 
// Step 4. Initialize all the Device Peripherals to a known state:
// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); skip this for SCI tests
// Step 5. User specific functions, Reassign vectors (optional), Enable Interrupts:
 
    isrCount = 0;
    ErrorCount = 0;
#if SCIB
    scib_fifo_init();       // Initialize the SCI FIFO
    scib_loopback_init();  // Initalize SCI 
#elif SCIC
    scic_fifo_init();       // Initialize the SCI FIFO
#endif
// Send a character ,先给发送缓冲寄存器赋值。
    for(i=0;i<4;i++)
    {
        scic_xmit(sdata[i]+0x30);
    } 
   scic_xmit(' ');
// Step 6. Send Characters forever starting with 0x00 and going through
// 0xFF.  After sending each, check the recieve buffer for the correct value
 EALLOW;  
//  PieVectTable.SCIRXINTC = &uartIsr;  
    PieVectTable.SCITXINTC = &uart_send;  
    EDIS;  
    PieCtrlRegs.PIECTRL.bit.ENPIE=1;  
//  PieCtrlRegs.PIEIER8.bit.INTx5=1;  
    PieCtrlRegs.PIEIER8.bit.INTx6=1;  
    IER|=M_INT8;  
    EINT;  
    ERTM;    
    for(;;){ }
}
interrupt void uart_send(void)  
{  
    Uint16 i;   
    isrCount++;
    sdata[3]=isrCount;
    for(i=0;i<4;i++)
    {
      scic_xmit(sdata[i]+0x30);
    }  
    scic_xmit(' '); 
    if(isrCount==10)
    {
        ScicRegs.SCICTL1.bit.TXENA =0;//禁止发送缓冲器工作。
    }
    PieCtrlRegs.PIEACK.all=0xffff;//0x0080; 
    ScicRegs.SCIFFTX.bit.TXFFINTCLR=1;    // Clear SCI Interrupt flag
}  
 
// Transmit a character from the SCI'
void scic_xmit(int a)//发送一个数据a,类型为int
{
   ScicRegs.SCITXBUF=a;//向数据缓冲寄存器中写入数据即可发送该数据
}
 
// Initalize the SCI FIFO
void scic_fifo_init()
{
// Test 1,SCIC  DLB, 8-bit word, baud rate 9.6k, default, 1 STOP bit, no parity
//功能是配置发送模式
// Note: Clocks were turned on to the SCIC peripheral
//  in the InitSysCtrl() function
//  ScicRegs.SCICTL1.all =0x0000; //开始的时候先禁止接收与发送功能 
    ScicRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,                   
                                   // async mode, idle-line protocol
//数据长度8位,一个结束位,无奇偶校验,空闲线模式,禁止回送    
                                 
//  ScicRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                      // Disable RX ERR, SLEEP, TXWAKE
                                   
    ScicRegs.SCICTL1.all =0x0002; //允许发送,禁止接收                              
//  ScicRegs.SCICTL2.all =0x0001;//发送缓冲器中断使能。似乎与下面的重复了
    ScicRegs.SCICTL2.bit.TXINTENA =1;//发送缓冲器中断使能。
//  ScicRegs.SCICTL2.bit.RXBKINTENA =1;
    ScicRegs.SCIHBAUD    =0x0001;
    ScicRegs.SCILBAUD    =0x00e7;
 //上面是波特率设置,书上写的0x00e7   
    
//  ScicRegs.SCICCR.bit.LOOPBKENA =0;// enable(Disable) loop back
    ScicRegs.SCICTL1.all =0x0022;     // Relinquish SCI from Reset
//FIFO设置
    ScicRegs.SCIFFTX.bit.TXFIFOXRESET=0;
//  ScicRegs.SCIFFRX.bit.RXFIFORESET=0;
 
    ScicRegs.SCIFFTX.all=0xE060;
//  ScicRegs.SCIFFRX.all=0x204f;
    ScicRegs.SCIFFCT.all=0x0;
}
 
//===========================================================================
// No more.
//===========================================================================

————————————————
版权声明:本文为CSDN博主「E_ROAD_BY_U」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/E_ROAD_BY_U/article/details/53221479

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转:DSP28335使用FIFO的串口中断总结 的相关文章

  • (一)DSP28335

    前言 xff1a 用于记录一些在学习实验室48V无人机项目所用的DSP28335时的一些心得体会 xff0c 主要参考资料是普中科技的那个资料手册 1 通信相关 区分开串口通信与串行通信 xff0c 串口通信 xff08 Serial Co
  • the read modes of FPGA FIFO —FWFT and Standard

    1 FWFT first word fall through 模式 xff1a 当rd en由低跳变到高电平时候 xff0c FIFO读出的数据FIFO dout 立即读出来 2 Standard 标准模式 xff1a 当rd en由低跳变
  • UART的FIFO功能

    经常听到UART的FIFO功能 xff0c 但是从来没有真正使用过和认真思考过它的作用 正好有客户用到这个功能 xff0c 在这里做个总结 FIFO 是 First In First Out 的缩写 xff0c 它是一个具有先入先出特点的缓
  • STM32带FIFO的DMA传输应用示例

    STM32系列芯片都内置DMA外设 xff0c 其中很多系列的DMA配备了FIFO 这里以STM32F429芯片及开发板为例 xff0c 演示一下带FIFO的DMA传输实现过程 大致情况是这样的 xff0c 我用TIMER1通道1的比较事件
  • STM32串口通信(串口中断、FIFO机制)之安富莱代码学习笔记

    创建串口设备结构体 span class token keyword typedef span span class token keyword struct span span class token punctuation span U
  • FIFO与DMA

    FIFO存储器是一个先入先出的双口缓冲器 xff0c 即第一个进入其内的数据第一个被移出 xff0c 其中一个存储器的输入口 xff0c 另一个口是存储器的输出口 主要有三个方面的作用 xff1a 1 xff09 对连续的数据流进行缓存 x
  • FIFO理解

    小白一枚 以下是我在学习SCI通信时 xff0c 使用到FIFO寄存器对其手册进行学习的一些经验与心得 xff0c 为了防止以后使用时忘记 xff0c 故此记录 仅供本人使用 另 xff1a 如有理解不当之处 xff0c 欢迎指正 xff0
  • FPGA原理与结构——FIFO IP核的使用与测试

    一 前言 本文介绍FIFO Generator v13 2 IP核的具体使用与例化 在学习一个IP核的使用之前 首先需要对于IP核的具体参数和原理有一个基本的了解 具体可以参考 FPGA原理与结构 FIFO IP核原理学习https blo
  • 初步认识Ehcache清空缓存的3种策略

    Ehcache是一种广泛使用的开源Java分布式缓存 主要面向通用缓存 Java EE和轻量级容器 它具有内存和磁盘存储 缓存加载器 缓存扩展 缓存异常处理程序 一个gzip缓存servlet过滤器 支持REST和SOAP api等特点 在
  • Xilinx FIFO Generator 需要注意RST复位

    Xilinx FIFO Generator 需要注意RST复位 系列文章推荐 Xilinx FIFO Generator 需要注意RST复位 Xilinx FIFO Generator 需要注意Actual Depth Xilinx FIF
  • RAM IP core(2)

    例化5种RAM IP core 1 单端口RAM Single port RAM RAM参数设置如上图所示 输入输出位宽都为8位 深度为16 采用一级输出寄存器 读写模式为no change 用COE文件对RAM进行初始化 关于COE文件的
  • AWS SQS FIFO - 如何一次获取超过 10 条消息?

    目前我们想要拉下一个整个 FIFO 队列 并处理内容 如果有任何问题 将消息释放回队列中 问题是 目前 AWS 只给我们 10 条消息 并且不会再给我们 10 条消息 这是在 SQS 中获取批量消息的方式 多个 10 条最大消息请求 直到我
  • OSError: [Errno 11] 资源暂时不可用。这是什么原因造成的?

    背景 我有两个 python 进程需要相互通信 通信由名为 Pipe 的类处理 我为此创建了一个单独的类 因为大多数需要通信的信息都以字典的形式出现 因此 Pipe 实现了一个非常简单的协议来执行此操作 这是管道构造函数 def init
  • MySQL 表作为 FIFO/队列

    我们如何才能将Mysql表视为有限的FIFO缓冲区 队列 目标是 该表一次只能有 N 行 当插入一行时 应删除最旧的行以保持行数为 N 请建议方法 UPDATE 抱歉 伙计们 正如很多人指出的那样 我将问题从 STACK 更改为 FIFO
  • 通过 FIFO 重定向 stdin

    我正在 GNU Linux 下运行一个服务器应用程序 用 Java 编写 它接收输入 我猜是来自标准输入 并解释它以运行一些命令 我不想在终端窗口内运行应用程序 我想运行守护程序 但我仍然希望能够随时输入命令 我想我也许可以使用 fifos
  • 如何保证 ThreadPoolExecutor 中的 FIFO 执行顺序

    我用这行代码创建一个 ThreadPoolExecutor private ExecutorService executor new ThreadPoolExecutor 5 10 120 TimeUnit SECONDS new Arra
  • 完全通过 FIFO 连接到 MySQL 客户端

    在 Bash 脚本中 我想在多个顺序访问中保持 MySQL 会话打开 访问 MySQL 的常见方法是为每个 SQL 命令或命令集打开一个单独的会话 例如 mysql u user e show tables 此方法的限制是那些需要双重事务的
  • Node.js fs.open() 在尝试打开超过 4 个命名管道 (FIFO) 后挂起

    我有一个 node js 进程 需要从不同其他进程提供的多个命名管道中读取数据作为 IPC 方法 我意识到在打开并创建来自四个以上 fifo 的读取流后 fs 似乎不再能够打开 fifo 并只是挂在那里 考虑到可以毫无问题地同时打开数千个文
  • 有队列实现吗?

    任何人都可以建议使用 Go 容器来实现简单快速的 FIF 队列 Go 有 3 种不同的容器 heap list and vector 哪一种更适合实现队列 事实上 如果您想要的是一个基本且易于使用的 fifo 队列 slice 可以满足您所
  • 我应该将哪个 STL 容器用于 FIFO?

    哪种 STL 容器最适合我的需求 我基本上有一个 10 个元素宽的容器 我在其中不断地push back新元素的同时pop front计算最旧的元素 大约一百万次 我目前正在使用std deque对于这项任务 但想知道是否std list会

随机推荐

  • 程序设置波特率和串口调试助手波特率设置不同才能通信

    本人小白一个 xff0c 在根据教程去做串口通信时 xff0c 程序码完之后 xff0c 调试助手一直显示乱码 网络上查找原因 xff0c 得知是波特率不对 xff0c 当串口的波特率是38400 xff0c 程序上是115200时 xff
  • MPC574x平台学习——CAN通信

    前言 MPC574x是恩智浦公司出的一个系列的芯片 xff0c 本人所接触的主要是MPC5742 xff0c 最近在调试MPC5742的CAN通信 xff0c 使用S32自带的SDK生成CAN驱动 通过网络的教程去完成 xff0c 但是跟着
  • QT报错:error: static assertion failed: No Q_OBJECT in the class with the signal

    今天利用QT写一个项目 xff0c 在写代码的过程中 xff0c 使用到了QT中一大特色 信号和槽 xff0c 对这个也是刚刚学习阶段 xff0c 所以在这里遇到了一个问题 xff1a error static assertion fail
  • eclipse报错“Symbol could not be resolved”,但是编译没有问题

    Eclipse作为一个强大的编辑器 xff0c 可以用来做很多的工作 xff0c 在Eclipse中偶然遇到一个问题 Symbol could not be resolved xff0c 但是编译能够通过 xff1b 这个问题网上有很多人有
  • LCD屏幕调试过程(驱动IC ST7701s)

    调试准备工作 1 屏幕开发手册 xff1b 2 逻辑分析仪 xff08 用来捕获信号 xff0c 信号是否正确 xff09 xff1b 3 驱动板 xff0c 驱动屏幕显示 xff1b 屏幕接口 根据手册的说明 xff0c 可以知道屏幕的一
  • Ubuntu 18.04 安装Open3D C++版本

    此篇博客引用博客Ubuntu18 04 安装Open3D C 43 43 与Python版本 zpwhust的博客 CSDN博客 ubuntu 安装open3d 并在此基础上进行整理 环境 linux ubuntu 18 04 cmake
  • C++ 编译出现问题 -(undefined reference to `vtable for xxx‘)

    在编码遇到这个问题 xff0c 记录一下 xff0c 代码结构如下 class father father father class son public father son father son 乍一看 xff0c 没啥不对的 xff0
  • 实用工具合集

    工作中遇到的比较好用的网站 xff0c 记录一下 数学 1 3D Rotation converter 这是一个欧拉角 xff0c 旋转矩阵 xff0c 旋转向量相互转换的网站 2 坐标系 实时显示函数的一个网站 xff0c 功能强大 xf
  • Opencv3.2安装opencv_contrib-3.2

    在open3 x的版本中 xff0c 图像特征提取的算法并未在源码中 xff0c 需要从OpenCV contrib 3 2编译安装 xff0c 下面就是记录一下编译安装的过程 下载 opencv contrib 3 2下载地址 编译 cm
  • vector的成员函数解析

    vector是线性容器 它的元素严格的按照线性序列排序 和动态数组很相似 和数组一样 它的元素存储在一块连续的存储空间中 这也意味着我们不仅可以使用迭代器 iterator 访问元素 还可以使用指针的偏移方式访问 和常规数组不一样的是 ve
  • ROS编程遇到的错误小结

    1 终端出现MD5值不匹配问题 这种情况 xff0c 是由于通信双方的数据内容不同 持续更新
  • HTML 和 XML 数据的分析与解析

    引言 目前在 Java 中 xff0c 解析 HTML 工具主要包含以下几种 xff1a jsoup xff1a 强大的 HTML 解析工具 xff0c 支持以 jQuery 中 CSS Selector 的方式提取 HTML 中的元素 x
  • 【掌控板】0、基础教程

    环境搭建 软件 xff1a mind 43 硬件 xff1a 掌控板2 0 mind 43 使用界面 项目 新建项目 连接掌控板和pc 我的显示有问题 xff0c 是因为我原先代码出错了 xff0c 正常情况下会显示掌控板 驱动更新好了在m
  • 方波的产生——运算放大器LM324产生方波

    方波的产生 运算放大器LM324产生方波 双电源供电 xff08 1 xff09 搭建振荡电路如图所示 xff0c 先采用双电源供电讲解 xff0c 需要两个滑动变阻器RP1和RP2 xff0c 一个固定电阻R1和一个电容C1 xff0c
  • Android Studio开发手机APP(一)

    Day1 新建工程 软件安装可以参考Android第一天 安装Android Studio 3 5 一 打开Android Studio xff0c 新建工程 xff08 Android Studio版本 xff1a Version 3 5
  • 在Win10上使用Linux子系统和VSCode搭建C语言开发环境

    在Win10上使用Linux子系统和VSCode搭建C语言开发环境 一 启动Windows下的Linux子系统 打开控制面板 xff0c 点击卸载程序 点击右侧的 启用和关闭Windows功能 找到适用于Linux的Windows子系统 x
  • C语言网络编程(3)— 通过DNS连接到百度

    C语言网络编程 xff08 3 xff09 通过DNS连接到百度 一 gethostbyname 函数 我们现在认知一台计算机主机通常采用直观可读的名字 例如百度我们会记住 www baidu com 而不是他的IP地址 对于大多数的应用程
  • C语言网络编程(4)— 通过DNS连接到百度-优化

    C语言网络编程 xff08 4 xff09 通过DNS连接到百度 优化 一 gethostbyname和getaddrinfo 之前我们使用gethostbyname 函数完成了主机名到地址的解析 xff0c 但这个函数仅仅支持IPv4 x
  • C语言网络编程(5)— MQTT通信

    C语言网络编程 xff08 5 xff09 MQTT通信 一 下载mqtt C语言库 首先我们要下载支持MQTT的C语言库 xff0c 直接使用git命令拉取 xff1a span class token function git span
  • 转:DSP28335使用FIFO的串口中断总结

    版权声明 xff1a 本文为CSDN博主 E ROAD BY U 的原创文章 xff0c 遵循CC 4 0 BY SA版权协议 xff0c 转载请附上原文出处链接及本声明 原文链接 xff1a https blog csdn net E R