MPLAB® Harmony v3 Drivers and Middleware on PIC32MZ EF MCUs Using FreeRTOS: Step 2

Last modified by Microchip on 2023/11/09 09:08

Configure I²C Driver and I²C pins

Click on the Resource Management [MCC] tab, In the Device Resources , expand Harmony > Drivers.

  • Select and double-click on I2C to add the I²C driver to the project.

i2c driver selection

core activation

freertos activationi2c core freertos

Select FreeRTOS and view the Configuration Options on the right. Depending on the requirements of the application, the FreeRTOS default configuration can be changed using the GUI. For this tutorial, you will use the default configuration.

freertos default

Adding FreeRTOS maps all the Operating System Abstraction Layer (OSAL) Application Programming Interface (API) calls used by the Harmony drivers and system services to FreeRTOS APIs.

Associate the I²C driver with I²C instance 1 (I²C1) peripheral by right clicking on the red diamond highlighted below.

i2c driver instance

i2c driver project graph plib linked

Click on Instance 0 under I²C Driver to view the Configuration Options. Change the Number of clients to 2.


  • The above configuration allows the same instance of driver to be used by two different clients. The first application client interfaces with the Temperature Sensor thread and the second application client interfaces with the EEPROM thread.
  • The number of clients for each driver instance is automatically set to one. MPLAB® Code Configurator (MCC) assumes a minimum of one client for each instance of the driver.

i2c driver multiclient

If the application had two or more devices that were interfaced through different I²C peripherals, then the driver had to be configured to enable multiple instance support. Multiple instance support is enabled by clicking on the + (plus) sign on the I²C driver block. Every click on the + (plus) sign adds a new instance to the driver. Each instance can be configured separately.

 Click on I2C to verify the driver is configured in Synchronous mode.

i2c sync

 Select I2C1 Peripheral Library and notice the default configuration by expanding Hardware Settings.

i2c plib conf

The I²C retains the default 50 kHz speed because the temperature sensor chip and EEPROM on I/O1 Xplained Pro Extension Kit can operate at 50 kHz I²C speed.

 In MCC, open the pin configuration tabs by clicking Project Graph > Plugins > Pin Configuration

open pin configuration

   Select the MCC Pin Settings tab and sort the entries by Ports as shown below.

i2c pins setup

 Now, select the MCC Pin Table tab and then scroll down to the I2C 1 module as shown below.

  • Enable I²C Clock (SCL1) on RA14 (Pin #95).
  • Enable I²C Data (SDA1) on RA15 (Pin #96).

I2C pins setup

i2c pins setup continuted

This completes the configuration of the I²C driver. The application code will use the I²C driver APIs to read the temperature from the temperature sensor and store it in EEPROM. The application also retrieves the last five temperature values stored in the EEPROM.

Back to Top

Step 2.2: Configure Universal Synchronous Asynchronous Receiver Transmitter (USART) Driver and USART pins

 Click on the Resource Management [MCC] tab, In the Device Resources, expand Harmony > Drivers.

 Double-click on USART to add the USART Driver to the project. 

usart driver select
usart driver project graph

 Associate the USART Driver with UART instance 6 (UART6) peripheral by right-clicking on the red diamond highlighted below.

usart driver instance

usart driver project graph plib linked

Verify that the USART Driver is configured to run in Synchronous mode by clicking on the USART block as shown below.

usart sync

Click on Instance 0 under USART Driver to view the Configuration Options. Change the Number of Clients of the USART Driver Instance from 0 to 3. The User Input thread will use the USART Driver to read the character input on the serial terminal. The Sensor and EEPROM threads will use the USART Driver to print temperature values on the serial terminal.

i2c driver instance changes

Select the UART6 Peripheral Library in the Project Graph and configure it for UART protocol, including setting the Baud Rate to 115,200 Hz.

usart plib conf

Back to Top

 Select the Pin Table tab and then scroll down to the UART6 module as shown below.

  • Enable USART_TX (U6TX) on RF2 (Pin #79).
  • Enable USART_RX (U6RX) on RF13 (Pin #57).

usart pins setup

usart pins setup

The application will use the USART Driver for printing messages on the serial terminal and receiving input from the user to retrieve the last five stored values from the EEPROM.

Back to Top