{"id":3926,"date":"2020-11-27T10:33:09","date_gmt":"2020-11-27T10:33:09","guid":{"rendered":"http:\/\/fastbitlab.com\/?p=3926"},"modified":"2023-09-05T15:32:11","modified_gmt":"2023-09-05T10:02:11","slug":"stm32-i2c-lecture-9-i2c-user-configurable-macros","status":"publish","type":"post","link":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/","title":{"rendered":"STM32 I2C Lecture 9: I2C User Configurable Macros"},"content":{"rendered":"<div class=\"boldgrid-section\" style=\"background-image: linear-gradient(to left, #eeeeee, #eeeeee);\" data-bg-color-1=\"#EEEEEE\" data-bg-color-2=\"#EEEEEE\" data-bg-direction=\"to left\">\n<div class=\"container\">\n<div class=\"row\" style=\"padding-top: 50px; padding-bottom: 50px;\">\n<div class=\"col-md-1 col-sm-12 col-xs-12 col-lg-1\">\n<p>&nbsp;<\/p>\n<\/div>\n<div class=\"col-md-10 col-sm-12 col-xs-12 col-lg-10\">\n<h1 class=\"\" style=\"text-align: center; border-width: 0px; font-size: 40px; line-height: 56px;\"><span style=\"color: #000080;\">I2C User Configurable Macros<\/span><\/h1>\n<div class=\"row bg-editor-hr-wrap\">\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<div>\n<p>&nbsp;<\/p>\n<div class=\"bg-hr bg-hr-10\" style=\"border-style: solid; border-width: 0px 0px 3px; width: 89%; color: rgba(11, 34, 151, 0.9); margin-top: -25px;\"><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p class=\"\" style=\"font-size: 17px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000000;\">The process of configuring and handling I2C drivers often involves creating specific structures and macros for customization. Below, we provide a more structured and detailed explanation of the steps involved in configuring I2C drivers using user-configurable macros:<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>1. Configuration and Handle Structure:<\/strong><\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000000;\">In the <code>i2c_driver.h<\/code> file (as shown in Figure 1), a configuration and handle structure is created. This structure will be used to customize various parameters of the I2C driver.<\/span><\/p>\n<div class=\"mceTemp\"><\/div>\n<figure id=\"attachment_3928\" aria-describedby=\"caption-attachment-3928\" style=\"width: 716px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" class=\" wp-image-3928\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/Figure-1.png\" alt=\"\" width=\"716\" height=\"378\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-300x158.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-768x405.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-1024x541.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-600x317.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-120x63.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-500x264.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-400x211.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-800x422.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1-1200x633.png 1200w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><figcaption id=\"caption-attachment-3928\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 1. Creation of configuration and handle structure in i2c_driver.h file.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-size: 20px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>2. Adding Headers:<\/strong><\/span><\/p>\n<ul class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li><span style=\"color: #000000;\">Import the <code>stm32f407xx.h<\/code> header from <code>SPI_driver.h<\/code> into every driver.h file in your project (as shown in Figure 2). This header provides access to STM32F407xx specific definitions and registers.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3930\" aria-describedby=\"caption-attachment-3930\" style=\"width: 681px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\" wp-image-3930\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/Figure-2.png\" alt=\"\" width=\"681\" height=\"361\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-768x408.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-1024x544.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-600x319.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-500x266.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-800x425.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-2-1200x637.png 1200w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><figcaption id=\"caption-attachment-3930\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 2. stm32f407xx.h header added in every driver.h file.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>3. Including <code>i2c_driver.h<\/code>:<\/strong><\/span><\/p>\n<ul class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li><span style=\"color: #000000;\">Add the <code>i2c_driver.h<\/code> file at the end of the device-specific header or <code>stm32f407xx.h<\/code> (as shown in Figure 3). This ensures that the I2C driver configurations are available for your project.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3932\" aria-describedby=\"caption-attachment-3932\" style=\"width: 697px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\" wp-image-3932\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/Figure-3.png\" alt=\"\" width=\"697\" height=\"268\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3.png 1915w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-300x115.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-768x296.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-1024x394.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-600x231.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-120x46.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-500x192.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-200x77.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-400x154.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-800x308.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-3-1200x462.png 1200w\" sizes=\"(max-width: 697px) 100vw, 697px\" \/><figcaption id=\"caption-attachment-3932\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 3. i2c_driver.h file added at the end of the stm32f407xx.h.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>4. Initializing I2C Driver Parameters:<\/strong><\/span><\/p>\n<ul class=\"\" style=\"font-size: 17px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li><span style=\"color: #000000;\">The <code>i2c_driver.c<\/code> file starts empty (as in Figure 4), and now you will initialize various member elements of the I2C driver structure.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3933\" aria-describedby=\"caption-attachment-3933\" style=\"width: 723px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3933\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/Figure-4.png\" alt=\"\" width=\"723\" height=\"385\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4.png 1915w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-768x409.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-1024x545.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-600x319.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-500x266.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-400x213.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-800x426.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-4-1200x639.png 1200w\" sizes=\"(max-width: 723px) 100vw, 723px\" \/><figcaption id=\"caption-attachment-3933\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 4. i2c_driver.c file.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-size: 20px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>5. Initialize <code>I2C_SCLSpeed<\/code>:<\/strong><\/span><\/p>\n<ul class=\"\" style=\"font-size: 17px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li><span style=\"color: #000000;\">The speed of the I2C bus can be set to either normal or fast mode. To achieve this, you create macros for initializing the <code>I2C_SCLSpeed<\/code> member variable.<\/span><\/li>\n<li><span style=\"color: #000000;\">Two options are provided: normal mode (100KHz) and fast mode (up to 400KHz), as shown in Figure 5.1.1.<\/span><\/li>\n<li><span style=\"color: #000000;\">Additional macros can be created to specify speeds between 100KHz and 400KHz, as depicted in Figure 5.1.2.<\/span><\/li>\n<\/ul>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3935\" aria-describedby=\"caption-attachment-3935\" style=\"width: 697px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3935\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.1-1.png\" alt=\"I2C user configurable macros\" width=\"697\" height=\"369\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-768x407.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-1024x543.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-600x318.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-500x265.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-800x424.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1-1200x636.png 1200w\" sizes=\"(max-width: 697px) 100vw, 697px\" \/><figcaption id=\"caption-attachment-3935\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 5.1.1. Initializing member element I2C_SCLSpeed.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3936\" aria-describedby=\"caption-attachment-3936\" style=\"width: 691px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3936\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.1.2.png\" alt=\"\" width=\"691\" height=\"366\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-768x406.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-1024x542.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-600x317.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-120x63.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-500x264.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-800x423.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.2-1200x635.png 1200w\" sizes=\"(max-width: 691px) 100vw, 691px\" \/><figcaption id=\"caption-attachment-3936\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 5.1.2. Creating more macros to get the value between 100KHz and 400KHz.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>6. Initialize <code>I2C_DeviceAddress<\/code>:<\/strong><\/span><\/p>\n<ul class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li><span style=\"color: #000000;\">The <code>I2C_DeviceAddress<\/code> is of type <code>uint8_t<\/code> and represents the 7-bit address of the slave device. Since it is user-defined, no specific initialization option is needed.<\/span><\/li>\n<\/ul>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>7.Initialize <code>I2C_AckControl<\/code>:<\/strong><\/span><\/p>\n<ul class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li><span style=\"color: #000000;\">The I2C acknowledgment control is configured by setting or clearing the 10th bit of the CR1 register. By default, automatic acknowledgment is disabled (10th bit = 0), meaning no acknowledgment is returned for received bytes.<\/span><\/li>\n<li><span style=\"color: #000000;\">To enable acknowledgment, the 10th bit of the CR1 register should be set to 1, as shown in Figure 5.3.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3937\" aria-describedby=\"caption-attachment-3937\" style=\"width: 712px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3937\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.3-1.png\" alt=\"I2C user configurable macros\" width=\"712\" height=\"375\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1.png 1917w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-300x158.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-768x404.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-1024x539.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-600x316.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-120x63.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-500x263.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-200x105.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-400x211.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-800x421.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1-1200x632.png 1200w\" sizes=\"(max-width: 712px) 100vw, 712px\" \/><figcaption id=\"caption-attachment-3937\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 5.3. Initializing I2C_AckControl.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-size: 20px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>8. Initialize <code>I2CFMDutyCycle<\/code>:<\/strong><\/span><\/p>\n<ul class=\"\" style=\"font-size: 17px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li><span style=\"color: #000000;\">This parameter is used to initialize the duty cycle of the serial clock in fast mode.<\/span><\/li>\n<li><span style=\"color: #000000;\">You can refer to the 14th bit of the CCR register (Figure 5.4.1) to set the duty cycle.<\/span><\/li>\n<li><span style=\"color: #000000;\">Two macros, <code>I2C_FM_DUTY_2<\/code> and <code>I2C_FM_DUTY_16_9<\/code>, are created to specify the two types of duty cycles (2 and 16\/9), as demonstrated in Figure 5.4.2.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3938\" aria-describedby=\"caption-attachment-3938\" style=\"width: 732px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3938\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.4.1.png\" alt=\"I2C user configurable macros\" width=\"732\" height=\"363\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1.png 1399w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-300x149.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-768x380.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-1024x507.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-600x297.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-120x59.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-500x248.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-200x99.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-400x198.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-800x396.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.1-1200x594.png 1200w\" sizes=\"(max-width: 732px) 100vw, 732px\" \/><figcaption id=\"caption-attachment-3938\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 5.4.1. I2C_CCR<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3939\" aria-describedby=\"caption-attachment-3939\" style=\"width: 722px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3939\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.4.2.png\" alt=\"I2C user configurable macros\" width=\"722\" height=\"382\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2.png 1915w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-768x407.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-1024x543.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-600x318.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-500x265.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-800x424.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.2-1200x636.png 1200w\" sizes=\"(max-width: 722px) 100vw, 722px\" \/><figcaption id=\"caption-attachment-3939\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 5.4.2. Initializing I2CFMDutyCycle.<\/span><\/figcaption><\/figure>\n<p class=\"\" style=\"border-width: 0px; font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">The above four are the options to initialize the configurable items.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"border-width: 0px; font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000000;\">In the following article, let&#8217;s see<\/span> <span style=\"color: #0000ff;\"><a style=\"color: #0000ff; text-decoration: underline;\" href=\"http:\/\/fastbitlab.com\/stm32-i2c-lecture-10-i2c-api-prototypes\/\" target=\"_blank\" rel=\"noopener\">I2C API Prototypes<\/a><\/span>.<\/p>\n<p>&nbsp;<\/p>\n<p class=\"\" style=\"border-width: 0px; font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><b>FastBit Embedded Brain Academy Courses<\/b><\/span><\/p>\n<p class=\"\" style=\"border-width: 0px; font-size: 17px; line-height: 30px; font-family: Roboto; font-weight: 400;\" data-font-family=\"Roboto\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000000;\">Click here:<\/span>&nbsp;<span style=\"color: #0000ff;\"><a style=\"color: #0000ff; text-decoration: underline;\" href=\"http:\/\/fastbitlab.com\/course1\" target=\"_blank\" rel=\"noopener\">https:\/\/fastbitlab.com\/course1<\/a><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"boldgrid-section\" style=\"background-image: linear-gradient(to left, #eeeeee, #eeeeee);\" data-bg-color-1=\"#EEEEEE\" data-bg-color-2=\"#EEEEEE\" data-bg-direction=\"to left\">\n<div class=\"container\"><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; I2C User Configurable Macros &nbsp; &nbsp; The process of configuring and handling I2C drivers often involves creating specific structures and macros for customization. Below, we provide a more structured and detailed explanation of the steps involved in configuring I2C drivers using user-configurable macros: 1. Configuration and Handle Structure: In the i2c_driver.h file (as shown [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3928,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"off","ocean_gallery_id":[],"footnotes":""},"categories":[8],"tags":[23],"class_list":["post-3926","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-stm32-i2c-lectures","entry","has-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>STM32 I2C Lecture 9: I2C User Configurable Macros<\/title>\n<meta name=\"description\" content=\"Learn how to configure I2C drivers effectively using user-configurable macros. Explore step-by-step instructions, macros for customizing I2C\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"STM32 I2C Lecture 9: I2C User Configurable Macros\" \/>\n<meta property=\"og:description\" content=\"Learn how to configure I2C drivers effectively using user-configurable macros. Explore step-by-step instructions, macros for customizing I2C\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/\" \/>\n<meta property=\"og:site_name\" content=\"FastBit EBA\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fastbiteba\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-11-27T10:33:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-05T10:02:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1919\" \/>\n\t<meta property=\"og:image:height\" content=\"1013\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"FastBitLab\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fastbiteba\" \/>\n<meta name=\"twitter:site\" content=\"@fastbiteba\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"FastBitLab\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/\"},\"author\":{\"name\":\"FastBitLab\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\"},\"headline\":\"STM32 I2C Lecture 9: I2C User Configurable Macros\",\"datePublished\":\"2020-11-27T10:33:09+00:00\",\"dateModified\":\"2023-09-05T10:02:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/\"},\"wordCount\":550,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Figure-1.png\",\"keywords\":[\"STM32 I2C Lectures\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/\",\"name\":\"STM32 I2C Lecture 9: I2C User Configurable Macros\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Figure-1.png\",\"datePublished\":\"2020-11-27T10:33:09+00:00\",\"dateModified\":\"2023-09-05T10:02:11+00:00\",\"description\":\"Learn how to configure I2C drivers effectively using user-configurable macros. Explore step-by-step instructions, macros for customizing I2C\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#primaryimage\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Figure-1.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Figure-1.png\",\"width\":1919,\"height\":1013,\"caption\":\"Figure 1. Creation of configuration and handle structure in i2c_driver.h file.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-i2c-lecture-9-i2c-user-configurable-macros\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32 I2C Lecture 9: I2C User Configurable Macros\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\",\"name\":\"FastBit EBA\",\"description\":\"Your Online Academy of Embedded Systems\",\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\",\"name\":\"FastBit EBA\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo-EzNrEnyr.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo-EzNrEnyr.png\",\"width\":640,\"height\":640,\"caption\":\"FastBit EBA\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/fastbiteba\\\/\",\"https:\\\/\\\/x.com\\\/fastbiteba\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fastbit-embedded-brain-academy-b3167b124\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCa1REBV9hyrzGp2mjJCagBg\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\",\"name\":\"FastBitLab\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"caption\":\"FastBitLab\"},\"description\":\"The FastBit Embedded Brain Academy uses the power of internet to bring the online courses related to the field of embedded system programming, Real time operating system, Embedded Linux systems, etc at your finger tip with very low cost. Backed with strong experience of industry, we have produced lots of courses with the customer enrolment over 3000+ across 100+ countries.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"STM32 I2C Lecture 9: I2C User Configurable Macros","description":"Learn how to configure I2C drivers effectively using user-configurable macros. Explore step-by-step instructions, macros for customizing I2C","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/","og_locale":"en_US","og_type":"article","og_title":"STM32 I2C Lecture 9: I2C User Configurable Macros","og_description":"Learn how to configure I2C drivers effectively using user-configurable macros. Explore step-by-step instructions, macros for customizing I2C","og_url":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/","og_site_name":"FastBit EBA","article_publisher":"https:\/\/www.facebook.com\/fastbiteba\/","article_published_time":"2020-11-27T10:33:09+00:00","article_modified_time":"2023-09-05T10:02:11+00:00","og_image":[{"width":1919,"height":1013,"url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1.png","type":"image\/png"}],"author":"FastBitLab","twitter_card":"summary_large_image","twitter_creator":"@fastbiteba","twitter_site":"@fastbiteba","twitter_misc":{"Written by":"FastBitLab","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#article","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/"},"author":{"name":"FastBitLab","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d"},"headline":"STM32 I2C Lecture 9: I2C User Configurable Macros","datePublished":"2020-11-27T10:33:09+00:00","dateModified":"2023-09-05T10:02:11+00:00","mainEntityOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/"},"wordCount":550,"commentCount":1,"publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1.png","keywords":["STM32 I2C Lectures"],"articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/","url":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/","name":"STM32 I2C Lecture 9: I2C User Configurable Macros","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#primaryimage"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1.png","datePublished":"2020-11-27T10:33:09+00:00","dateModified":"2023-09-05T10:02:11+00:00","description":"Learn how to configure I2C drivers effectively using user-configurable macros. Explore step-by-step instructions, macros for customizing I2C","breadcrumb":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#primaryimage","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Figure-1.png","width":1919,"height":1013,"caption":"Figure 1. Creation of configuration and handle structure in i2c_driver.h file."},{"@type":"BreadcrumbList","@id":"https:\/\/fastbitlab.com\/blog\/stm32-i2c-lecture-9-i2c-user-configurable-macros\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fastbitlab.com\/blog\/"},{"@type":"ListItem","position":2,"name":"STM32 I2C Lecture 9: I2C User Configurable Macros"}]},{"@type":"WebSite","@id":"https:\/\/fastbitlab.com\/blog\/#website","url":"https:\/\/fastbitlab.com\/blog\/","name":"FastBit EBA","description":"Your Online Academy of Embedded Systems","publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fastbitlab.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fastbitlab.com\/blog\/#organization","name":"FastBit EBA","url":"https:\/\/fastbitlab.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2026\/04\/logo-EzNrEnyr.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2026\/04\/logo-EzNrEnyr.png","width":640,"height":640,"caption":"FastBit EBA"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/fastbiteba\/","https:\/\/x.com\/fastbiteba","https:\/\/www.linkedin.com\/in\/fastbit-embedded-brain-academy-b3167b124\/","https:\/\/www.youtube.com\/channel\/UCa1REBV9hyrzGp2mjJCagBg"]},{"@type":"Person","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d","name":"FastBitLab","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","caption":"FastBitLab"},"description":"The FastBit Embedded Brain Academy uses the power of internet to bring the online courses related to the field of embedded system programming, Real time operating system, Embedded Linux systems, etc at your finger tip with very low cost. Backed with strong experience of industry, we have produced lots of courses with the customer enrolment over 3000+ across 100+ countries."}]}},"_links":{"self":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/3926","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/comments?post=3926"}],"version-history":[{"count":5,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/3926\/revisions"}],"predecessor-version":[{"id":11345,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/3926\/revisions\/11345"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media\/3928"}],"wp:attachment":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media?parent=3926"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/categories?post=3926"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/tags?post=3926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}