头像-93790

一书生0414

  • 四川省成都市
  • 单片机 嵌入式 模拟技术
  • 医疗电子

个人成就

获得 1 次赞

帮助过16人

Quartus中进行时钟约束有什么用?

信号传播有延迟,路径不同延时不同。但是我们设计时总是假设两个信号是同时到达的。如果不对时钟约束,有可能布出来的线就会使几个信号到达模块时间相差很大,造成误判。约束时钟后编译器会根据约和设计束,合理布线,尽量消除时钟不同步带来的竞争和冒险

STM32的GPIO口如何实现电容触控按键功能?

借用445465396@qq.com的图像图上所示。触摸按键等同于一个电容,和电阻连接。当load端给出高电平时,按键和电阻连接的点的电压会慢慢上升​,接到连接点的io设置成输入模式,那么 这个点的电平会出现从低电平到高电平的变化。这个上升的时间由电容电阻值决定。我们只要记录这个上升需要的时间就可以判断按键按下与否。因为当人体接触按键时,按键电容会变化,因此这个上升的时间也会变化。流程就是load给高电平后开始记录时间,知道另一个io读到高电平停止记录,获取时间间隔。使用完后记得把电容上的电释放掉

画PCB的AD软件的封装怎么画

使用 LP wizard可以快速建立封装,保证是最快的,省去了画线的各种麻烦。查看教程地址https://pan.baidu.com/s/1cJT4a6#list/path=%2F​。看过视频你就知道多好用,附上下载地址https://pan.baidu.com/s/1cJT4a6#list/path=%2F​

一个能产生模拟信号的模块怎么做成可读的数字信号模块

你说的模块指的是几个芯片组成的小电路板还是一块芯片。如果是小电路板,那是利用了额外的芯片和ad芯片通信再转化协议的,比如你用一块小单片机读取ad芯片数值后再以一定的协议输出,这个协议可以自己定,这样就是一个小模块了。如果值得是一个芯片的话,那协议是片上集成了。想了解怎么实现的话你可以看看具体的内部结构。

利用STM32的位带操作在keil5环境不能直接赋值操作?

你看看sys.h的定义有没有问题。我用过是没问题的,不然你自己制作sys.h也可以。比如 /////////////////////////////////////////////////////////////// //位带操作,实现51类似的GPIO控制功能 //具体实现思想,参考<<CM3权威指南>>第五章(87页~92页). //IO口操作宏定义 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射 #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08 //IO口操作,只对单一的IO口! //确保n的值小于16! #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出 #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入 #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出 #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入 #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出 #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入 #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出 #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入 #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出 #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入 #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出 #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入 上面的代码用宏定义计算出位带地址。不喜欢它的名字的话可以换成你自己的。我之前是写一个程序把这些格式化输出到串口,然后保存文件就直接得到地址的宏定义了,就不需要在计算,稍微省点时间。输出的方法是加入上面的宏定义,然后print。比如printf("#define PAout%d  %d\n",i,PAout(i));这样就直接输出PAoutx对应的地址的宏定义代码.

有没有熟悉超声波测距的?

效果应该不怎么样,测量的距离有限。和雷达差不多的原理,但是雷达用的电磁波,而且更加复杂,分析返回的波形可以得到物体移动速度、位置和大概形状等信息

树莓派通过hdmi连接屏幕可以直接使用嘛?

可以使用,我接到了家里的电视机,感觉很爽。发现有的应用时需要接实际的显示屏才能用的,远程登录 桌面用不了。比如我的世界这个游戏

STM32调试发现一个很奇怪滴现象,不知道什么原因?

你说的while(1)是哪个while(1)?是下面那一句还是上面被你注释掉的?还有,你的图我看不出有while的输出是哪些,无while的输出是从哪儿开始的。还有,这两个输出你想说什么问题?上面是我的疑问,下面说我猜测你要表达的问题吧(话说问问题还要人去猜你的问题是什么,太过分了)。你应该是说下面那个while,为什么不加的时候输出是循环一直有的,加上while后就只显示你要输出的几行。你的问题应该是这个吧?我看其他回答的好像没有答道点子上。如果真是那个问题,原因是编译器会自动给main函数加上死循环,由编译器决定的。