ST意法半导体
直播中

王欣

7年用户 171经验值
私信 关注
[问答]

如何使用ICU驱动程序?

以上来自于谷歌翻译


以下为原文

回帖(7)

刘鑫

2018-11-5 10:45:37
你好Gianluca,
 
1)第一个问题:
 
 
 
 
 
 
 
 
 
是一些调用的回调,回调应该在你的配置& icu_config_icucfg中
 
 
 
你应该删除你的主要
 
2)第二个问题:
 
 
 
 
Arduino-Style中的PulseIn是一种阻塞功能
 
读取引脚上的脉冲(高电平或低电平)。例如,如果是,等待引脚走,开始计时,然后等待引脚停止计时。以微秒为单位返回脉冲的长度。如果在指定的超时内没有脉冲开始,则返回并返回0。
 
你的日志太快了:
您应该在记录之前等待一些时间,或者在中断级别记录您的脉冲
 
明天,我将带上我的HC-SR04并尝试插上SPC560D Discovery Board
 
 最好的祝福
 
 二万

以上来自于谷歌翻译


以下为原文







Hello Gianluca ,

1) First Problem :




  • void

  • icuwidthcb(ICUDriver *icup) {













  •   


  • palSetPad(PORT_A, Led_D12);



  •   


  • last_width = icuGetWidth(icup);



  • }








  • void

  • icuperiodcb(ICUDriver *icup) {













  •   


  • palClearPad(PORT_A, Led_D12);



  •   


  • last_period = icuGetPeriod(icup);



  • }


are some callbacks called by   and the callbacks should be in your configuration &icu_config_icucfg






  • icuStart(&ICUD4, &icu_config_icucfg);


you should remove in your main


  • icuwidthcb(&ICUD4);



  • icuperiodcb(&ICUD4);



2) 2nd Problem :


  • chprintf((BaseSequentialStream *)&SD1,

  • ''Input Capture 3 Value is %u, %urn''

  • , last_width, last_period);




PulseIn in Arduino-Style is a blocking function

Reads a pulse (either HIGH or LOW) on a pin. For example, if  is ,  waits for the pin to go , starts timing, then waits for the pin to go and stops timing. Returns the length of the pulse in microseconds.Gives up and returns 0 if no pulse starts within a specified time out.  

Your log is too fast :
you should wait some times before logging or log your pulse at Interruption level

Tomorrow , i will bring my HC-SR04 and try to plug on SPC560D Discovery Board

   Best regards

                Erwan
举报

王欣

2018-11-5 11:04:14
你好,Erwan,
 
谢谢你的时间。我已从我的主要删除:
 
然后我添加了osalThreadSleepMilliseconds(2000);在icuEnable(& ICUD4)之后;
 
 
 
 
 
但仍然没有工作。它肯定会很简单,但我是嵌入式编程的新手。
 
 最好的祝福
 赞布罗塔。

以上来自于谷歌翻译


以下为原文





Hello Erwan,

Thanks for your time. I have removed from my main:



  • icuwidthcb (&ICUD4);



  • icuperiodcb (&ICUD4);


Then I added osalThreadSleepMilliseconds (2000); after icuEnable (& ICUD4);  



  • palClearPad(PORT_A, TRIG_PIN);

  • // low



  •          


  • osalThreadSleepMicroseconds(2);



  •          


  • palSetPad(PORT_A, TRIG_PIN);

  • //high



  •          


  • osalThreadSleepMicroseconds(10);



  •          


  • palClearPad(PORT_A, TRIG_PIN);

  • // low



  •          


  • palTogglePad(PORT_A,Led_D12);





  •          


  • icuStart(&ICUD4, &icu_config_icucfg);



  •                   


  • icuEnable(&ICUD4);





  •                      


  • osalThreadSleepMilliseconds(2000);





  •             


  • palSetPad(PORT_A, ECHO_PIN);

  • //high





  •          


  • icuDisable(&ICUD4);



  •          


  • icuStop(&ICUD4);


but still not working. It will definitely be something simple, but I'm a newcomer to embedded programming.

Best regards
Gianluca.
举报

刘鑫

2018-11-5 11:21:39
你好Gianluca,
 
你能否确认你使用的主板(HW)(Pictus Discovery)?
我正在检查您的SIUL配置,请不要犹豫,使用Pinmap向导来配置您的引脚
 
 
明天我会尝试使用我的传感器。
 
 最好的祝福
 
 二万

以上来自于谷歌翻译


以下为原文







Hello Gianluca ,

Could you confirm your board (HW) used (Pictus Discovery) ?
i am checking your SIUL Configuration, do not hesitate to use Pinmap Wizard to configure your pins




  • SIU.PCR[3].R =  0b0100010100000100;           

  • /* PA3 alternate function.  */



  •   


  • SIU.PCR[58].R = 0b0100010100000100;           

  • /* PD10 alternate function.  */


I will try with my sensor, tomorrow.

Best regards

                  Erwan
举报

王欣

2018-11-5 11:38:18
是。我的主板是SPC560P-DISP。 144针。
 
是的,pinmap向导要好得多。
谢谢。
 
 最好的祝福
 赞布罗塔。

以上来自于谷歌翻译


以下为原文





Yes. My board is SPC560P-DISP. 144 pin.

Yes the pinmap wizard is much better.
Thanks.

Best regards
Gianluca.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分