完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
测试方波频率 首先应该从输入捕获考虑 看有没有定时器的输入捕获与你说的 PC0 直接相连或者是映射 将其配置好之后 然后就是 对应的时钟打开 I/O模式配置好 应该是输入模式 |
|
|
|
下面这个函数是arduino中测量引脚高地平或者低电平维持时间的函数,楼主可以参照一下,只要测得引脚输入的高电平或者低电平维持时间,其倒数就是频率了。 unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout) { // cache the port and bit of the pin in order to speed up the // pulse width measuring loop and achieve finer resolution. calling // digitalRead() instead yields much coarser resolution. uint8_t bit = digitalPinToBitMask(pin); uint8_t port = digitalPinToPort(pin); uint8_t stateMask = (state ? bit : 0); unsigned long width = 0; // keep initialization out of time critical area // convert the timeout from microseconds to a number of times through // the initial loop; it takes 16 clock cycles per iteration. unsigned long numloops = 0; unsigned long maxloops = microsecondsToClockCycles(timeout) / 16; // wait for any previous pulse to end while ((*portInputRegister(port) & bit) == stateMask) if (numloops++ == maxloops) return 0; // wait for the pulse to start while ((*portInputRegister(port) & bit) != stateMask) if (numloops++ == maxloops) return 0; // wait for the pulse to stop while ((*portInputRegister(port) & bit) == stateMask) { if (numloops++ == maxloops) return 0; width++; } // convert the reading to microseconds. There will be some error introduced by // the interrupt handlers. // Conversion constants are compiler-dependent, different compiler versions // have different levels of optimization. #if __GNUC__==4 && __GNUC_MINOR__==3 && __GNUC_PATCHLEVEL__==2 // avr-gcc 4.3.2 return clockCyclesToMicroseconds(width * 21 + 16); #elif __GNUC__==4 && __GNUC_MINOR__==8 && __GNUC_PATCHLEVEL__==1 // avr-gcc 4.8.1 return clockCyclesToMicroseconds(width * 24 + 16); #elif __GNUC__<=4 && __GNUC_MINOR__<=3 // avr-gcc <=4.3.x #warning "pulseIn() results may not be accurate" return clockCyclesToMicroseconds(width * 21 + 16); #else // avr-gcc >4.3.x #warning "pulseIn() results may not be accurate" return clockCyclesToMicroseconds(width * 24 + 16); #endif } |
|
|
|
抱歉,你的这个程序我真没看懂!arduino是什么?
|
|
|
|
我只需要用KEIL编程的测试方波频率的程序代码!
|
|
|
|
感谢你的建议,但我现在学的是STM32F103RCT6啊!
|
|
|
|
楼主解决了吗
|
|
|
|
用定时器的输入捕获功能实现。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2093 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1931 浏览 3 评论
4526 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2076 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:03 , Processed in 0.840395 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号