完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#define PK GPIO_Pin_14
int main() { SetSysClock( CLK_SOURCE_PLL_80MHz ); GPIOB_ModeCfg( PK , GPIO_ModeIN_Floating ); //PK=1M while( 1 ) { if( GPIOB_ReadPortPin( PK ) ) GPIOB_SetBits(LED); else GPIOB_ResetBits(LED); } 请问:如上图显示,PK输入800K,有丢步现象,1.5M的话,丢步更厉害,不知如何用IO模拟4M高速采集端口数据? |
|
相关推荐
3个回答
|
|
|
|
|
|
按你的方法,代码如下,测试一下,效果有所改进,但1.5M就出现丢步现象。按理说80M的系统时钟处理1.5M的脉冲绰绰有余,因为MPU大部分指令应该是一个系统时钟吧?上次中断也是测试过,也是类似现象。有没有关于CH582的一些参数指标的文档,看一下。
#define PK GPIO_Pin_14 _HIGH_CODE void acq( void ) { while( 1 ) { if( GPIOB_ReadPortPin( PK ) ) GPIOB_SetBits(LED); else GPIOB_ResetBits(LED); } } int main() { SetSysClock( CLK_SOURCE_PLL_80MHz ); GPIOB_ModeCfg( PK , GPIO_ModeIN_Floating ); //PK=1M acq( ); } 我又测试了一下,循环执行一条指令,如下: _HIGH_CODE void acq( void ) while( 1 ) { GPIOB_InverseBits(PLED); } 输出频率为5M,80M的主频,怎么会只输出5M?? |
|
|
|
这边虽然是一句函数,但是汇编指令是五条,那么一个周期就是十条,如果一条指令需要一个机器周期,那么理论上输出频率是8M,如果想提高的话,需要在主循环中多加几条翻io的函数,那么一个周期需要的平均指令就会减少,输出10M以上。
这样写也会提高不少 R32_PA_OUT |= GPIO_Pin_4; R32_PB_CLR = GPIO_Pin_4; |
|
|
|
只有小组成员才能发言,加入小组>>
516 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2901 浏览 2 评论
2396 浏览 1 评论
862浏览 2评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
403浏览 1评论
680浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
413浏览 1评论
513浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 03:26 , Processed in 1.089195 second(s), Total 82, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号