【问题标题】:UWP: Cannot load PWM Controllers using Lightning on Raspberry Pi 2?UWP:无法在 Raspberry Pi 2 上使用 Lightning 加载 PWM 控制器?
【发布时间】:2017-12-13 08:31:01
【问题描述】:

我刚刚开始从事一个我曾经开始的旧项目,但不幸的是,PWM 控制器不再与 Lightning Driver 一起工作。我正在使用 Visual Studio 2017,RPi2 在 10.0.15063.414 运行,并且我安装了以下 Nuget-Packages:

  • Microsoft.IoT.Lightning (v1.1.0)
  • Microsoft.NETCore.UniversalWindowsPlatform (v5.3.3)
  • WinRTXamlToolkit.Controls.DataVisualization (v2.3.0)

该项目包括对

的引用
  • 分析仪
  • Microsoft.IoT.Lightning
  • Microsoft.NETCore.UniversalWindowsPlatform
  • %ClassesLibrary%
  • 通用Windows
  • 适用于 UWP 的 Windows IoT 扩展
  • WinRTXamlToolkit.Controls.DataVisualization,

其中 %ClassesLibrary% 是一个用户定义的项目,其中包含我的项目的一些类。在设备部分的Windows IoT Core的配置Web界面中,选择了直接内存映射驱动程序(当前驱动程序)。

我的初始化代码是这样的

    private static async Task InitOnboardHardware()
    {
        if (LightningProvider.IsLightningEnabled)
        {
            LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
            GpioController gpioController = GpioController.GetDefault();

            var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());
            if (pwmControllers != null)
            {
                m_PWMController = pwmControllers[1];
                //m_PWMController = (await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider()))[1];
                m_PWMController.SetDesiredFrequency(100);

                m_RPin = m_PWMController.OpenPin(18);
                m_GPin = m_PWMController.OpenPin(23);
                m_BPin = m_PWMController.OpenPin(24);
                m_WPin = m_PWMController.OpenPin(25);

                m_RPin.SetActiveDutyCyclePercentage(0);
                m_GPin.SetActiveDutyCyclePercentage(0);
                m_BPin.SetActiveDutyCyclePercentage(0);
                m_WPin.SetActiveDutyCyclePercentage(0);

                m_RPin.Start();
                m_GPin.Start();
                m_BPin.Start();
                m_WPin.Start();

                m_IsHardwareInitialized = true;
            }
        }
    }

PwmController.GetControllersAsync 方法永远不会完成,我的应用程序在启动时卡住了。评论的短版也不再工作了?!

我真的不知道我可能会错过什么。因此,我将不胜感激。

提前谢谢你!

编辑:我还尝试了另一个示例 (https://github.com/lprichar/WindowsIotPwmExample),其中我用 NuGet 包替换了嵌入式 C/C++ 闪电库(与我的项目中的版本相同)。该示例也失败了:引脚全部为空,因为 PwmController.GetControllersAsync 永远不会完成:-(

EDIT2:我忘了提到我的 package.appxmanifest 文件还包括以下更改

  <Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces="uap mp iot">

还有

<Capabilities>
<Capability Name="internetClient" />
<iot:Capability Name="lowLevelDevices" />
<DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141" />
</Capabilities>

【问题讨论】:

  • 我将 Windows IoT Core 更新为最新的 Insider 版本 (10.0.16226.1000),之后示例运行良好,但我的应用程序却没有。我比较了每一行,发现 GpioController 的方法不是异步的。将其更改为异步方法使我的应用程序运行良好!

标签: c# uwp raspberry-pi2 windows-10-iot-core pwm


【解决方案1】:

另请参阅我对第一篇文章的评论。我不得不改变这一行

GpioController gpioController = GpioController.GetDefault();

到异步方法调用

GpioController gpioController = await GpioController.GetDefaultAsync();

现在一切正常!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多