对STM32无法进行超声波仿真的一些思考

作者平时用protues8.8会做一些关于stm32的一些小实验,比如说点灯、驱动屏幕显示、串口输出等,无疑仿真有一定的好处。但是仿真一直存在的一些问题,这是我通过网络然后了解的一些问题的总结。进一步说明为什么关于stm32超声波网上仿真如此之少。
首先对于stm32的仿真在Protues是8.6以上即可仿真F1型部分。现在已经出了8.10可以仿真到F4型部分。
在运用时遇到以下问题(同样程序,实物能跑仿真不行):
一,打开定时器2、3、4的时候需要同时打开TIM1时钟,这一点儿与实物真的大有不同。
二,打开adc检测,在多组adc检测过程中, PA6口与PA0口检测数值一致,或者说, PA6口显示了PA0的数值。
三,仿真中的频率不宜过高,不然跑不动,一般使用8兆或者16兆赫兹,
四,对于按键功能,如若检测高低电平,如函数,GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),只有PA0、Pb0 、PC0、3个口可以进行读取,其他口的读取数值不正确或者检测不到。
五, Exti功能正常,所以经常可使用exti功能替换按键功能。
在超声波程序中,
我们除了用发射脉冲之外,还要对一个引脚进行接收脉冲,此时接收脉冲的引脚不是上述三个端口,那么用while循环判断就会卡死,不再继续进行。`/*

* 函数名:UltrasonicWave_StartMeasure
 * 描述  :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
 * 输入  :无
 * 输出  :无	
 */
void UltrasonicWave_StartMeasure(void)
{
  GPIO_SetBits(TRIG_PORT,TRIG_PIN); 		  //送>10US的高电平
  DelayTime_us(20);		                      //延时20US
  GPIO_ResetBits(TRIG_PORT,TRIG_PIN);
  
  while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));	             //等待高电平
  TIM_Cmd(TIM2, ENABLE);                                             //开启时钟
  while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));	                 //等待低电平
  TIM_Cmd(TIM2, DISABLE);			                                 //定时器2失能
  UltrasonicWave_CalculateTime();									 //计算距离
  TIM_SetCounter(TIM2,0);

	printf("\r\ndistance:%d%d cm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256);	
  	  
}`

如上,while循环在实物中是可以检测距离,但是仿真由于端口部无法检测到高低电平,故而无法正常检测数据。
解决方法一,
将接收端口改为以上三个端口, PA 0, Pb 0, PC 0.
解决方法二,
使用exti中断来进行判断

关于其他bug欢迎提出,有说的不对的地方,欢迎指正。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(~ ̄▽ ̄)~凤凰涅槃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值