推荐阅读最新更新时间:2024-11-11 10:41
stm32 pwm性能和fpga脉冲性能比较
stm32 pwm采取两种方式,一种是固定设置方式, 例如设置计数器为199个clk,脉宽为100clk ,第二种方式采取DMA配置脉宽方式, 例如我开了一个3000大小的数组,里面都写100, 采取循环DMA发送 fpga就比较简单,对clk计数,最大值为100,到0- 49的时候io为0,50-99为io口为1, 这样就产生了pwm波形 测试结果如下 stm32下面pwm两种方式性能都差不多, 360K基准上下波动3K,最大可达到5K, dma和直接pwm都一样。 fpga方式下面,410K基准上波动不超过1k 性能差异很明显,fpga方式远远好于stm32, 特别是考虑到多轴同步的时候更是这样。 示波器采用同样条件
[单片机]
基于STM32物联网开发板(3)--红外测温MLX90614
1.MLX90614简介 MX90614是一款由迈来芯公司提供的低成本,无接触温度计。输出数据和物体温度呈线性比例,具有高精度和高分辨率。TO-39金属封装里同时集成了红外感应热电堆探测器芯片MLX81101(温度是通过PTC或是PTAT元件测量)和信号处理专用集成芯片MLX90302,专门用于处理红外传感器输出信号。用以阻碍可见光和近红外光辐射的光学滤波器(可传播长波)集成在封装内提供对环境和日光的免疫。滤波器的波长通带为5.5到14μm。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理芯片 MLX90302,使得高精度和高分辨度的温度计得以实现。一个附加的片上温度传感器用来测量芯片的温度。测量完两个传感器的输出后,
[单片机]
AVR I/O口使用方法
AVR单片机寄存器 DDRx PORTx PINx 与对应IO端口之间的关系(x代表某个端口,如A端口、B端口等) 下表以端口B的第2位PB2为例子加以说明,并且假设PB2为悬空状态 DDRB.2 PORTB.2 读取PINB.2的结果 引脚PB2的状态 1 1 1 PB2推挽输出 1 1 0 0 PB2推挽输出 0 0 1 1 PB2弱上拉,可作输入 0 0 × PB2高阻抗,可作输入 读取PINB.2时,就是读取PB2引脚的实际电平, 如果PB2直接接VCC,那么任何时候读取PINB.2的结果都是1 如果PB2直接接GND,那么任何时候读取PIN
[单片机]
STM32-串口超时判断方式接收未知长度数据
usart.c串口中断处理函数: void USART1_IRQHandler(void) { u8 res; if(USART1- SR&(1 5))//接收到数据 { res=USART1- DR; if(USART1_Recv_LenCV_LEN) //还可以接收数据 { TIM3- CNT=0; //计数器清空 if(Rec_Over_Flag==0)TIM3_Set(1); //使能定时器4的中断 USART1_RX_BUF =res; //记录接收到的值
[单片机]
关于stm32的flash的擦除的理解
最近消化 正点原子《STM32不完全手册》—— 第三十一章 FLASH模拟EEPROM实验 时,对判断FLASH是否需要擦除的语句有点不理解,度娘了才知:FLASH擦除后字节存储的数据是0XFF void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) { u32 secpos; //扇区地址 u16 secoff; //扇区内偏移地址(16位字计算) u16 secremain; //扇区内剩余地址(16位字计算) u16 i; u32 offaddr; //去掉0X08000000后的地址 if(W
[单片机]
STM32串口获取氨气传感器数据
传感器:ZE03电化学模组NH3NH3 (0-100ppm) 同上篇关于STM32串口接收激光粉尘传感器的博文差不多,因为该传感器提供了串口输出数据,其他配置可以和粉尘传感器一样不变,主要修改串口中断函数即可 void USART2_IRQHandler(void) //串口2中断服务程序(氨气浓度测量) { u8 Res; static char i=0, start=0; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断 { Res =USART_ReceiveData(USART2); //读取接收到的数
[单片机]
基于STM32F103入门2——按键点灯
1:按键不带锁存 不带锁存的意思就是 比如你按下按键灯亮,但是你一旦松手了灯就熄灭了,所以你想这个灯一直亮,那么你就一直按着按键不松手。 1.1例程 key.c /*========================key.c=========================*/ #include stm32f10x.h #include key.h /*按键初始化函数*/ void KEY_Init(void) { //1.打开控制GPIOA的时钟(APB2) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //2.配置结构体
[单片机]
STM32学习笔记之复位后初始化变量非零方法
一些产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备。而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始化变量数据清零。如何设置非初始化数据变量不被零初始化,这是本篇文章所要探讨的。 在给出方法之前,先来了解一下代码和数据的存放规则、属性,以及复位后为何默认非初始化变量所在RAM都被初始化为零了呢。 什么是初始化数据变量,什么又是非初始化数据变量?(因为我的文字描述不一定准确,所以喜欢举一些例子来辅助理解文字。) 定义一个变量:int nTimerCount=20;变量nTimerCount就是初始化变量,也就是
[单片机]