UWP: Не удается загрузить ШИМ-контроллеры с помощью Lightning на Raspberry Pi 2?

Я просто начал работать над старым проектом, который я начал однажды, но, к сожалению, контроллер ШИМ больше не работает с драйвером молнии. Я использую Visual Studio 2017, RPi2 работает на 10.0.15063.414, и я установил следующие Nuget-пакеты:

  • 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%
  • UniversalWindows
  • Windows IoT Расширения для UWP
  • WinRTXamlToolkit.Controls.DataVisualization,

где%ClassesLibrary% - это определенный пользователем проект, содержащий несколько классов для моего проекта. В веб-интерфейсе конфигурации Windows IoT Core в разделе устройств выбран драйвер с прямой памятью (текущий драйвер).

Мой код инициализации выглядит так

    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), где я заменил встроенную библиотеку молний C/C++ на пакет NuGet (та же версия, что и в моем проекте). Образец также не работает: все контакты имеют нулевое значение, потому что 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>

1 ответ

Пожалуйста, смотрите мой комментарий к первому посту. Мне пришлось изменить эту строку

GpioController gpioController = GpioController.GetDefault();

на вызов асинхронного метода

GpioController gpioController = await GpioController.GetDefaultAsync();

и теперь все работает отлично!

Другие вопросы по тегам