{"id":3889,"date":"2020-11-26T06:08:55","date_gmt":"2020-11-26T06:08:55","guid":{"rendered":"http:\/\/fastbitlab.com\/?p=3889"},"modified":"2023-09-05T14:45:07","modified_gmt":"2023-09-05T09:15:07","slug":"driver-api-requirements-and-user-configurable-items","status":"publish","type":"post","link":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/","title":{"rendered":"STM32  I2C Lecture 7: I2C driver API requirements"},"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;\"><span style=\"color: #000080;\">I2C driver API requirements<\/span><\/h1>\n<div class=\"row bg-editor-hr-wrap\">\n<div class=\"col-md-12 col-xs-12 col-sm-12 col-lg-12\">\n<div>\n<hr>\n<\/div>\n<\/div>\n<\/div>\n<p class=\"\">&nbsp;<\/p>\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=\"font-weight: 400; color: #000000;\">In this article, let\u2019s discuss the driver API requirements and user-configurable items for I2C peripherals.<\/span><\/p>\n<div class=\"mceTemp\"><\/div>\n<figure id=\"attachment_3891\" aria-describedby=\"caption-attachment-3891\" style=\"width: 658px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-3891\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.png\" alt=\"I2C driver APIs\" width=\"658\" height=\"310\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.png 1880w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/0_1_300_140.625_Driver-APT-requirements-for-I2C-peripherals-768x362.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-768x362.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-1024x483.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-600x283.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-120x57.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-500x236.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-200x94.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-400x189.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-800x377.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals-1200x566.png 1200w\" sizes=\"(max-width: 658px) 100vw, 658px\" \/><figcaption id=\"caption-attachment-3891\" class=\"wp-caption-text\">&nbsp; <span style=\"color: #000000;\">Figure 1. Driver API requirements for I2C peripherals.<\/span><\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p class=\"\" style=\"font-size: 25px; font-family: 'Roboto Slab'; font-weight: 400; line-height: 35px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"text-decoration: underline; color: #000080;\"><b>I2C driver APIs<\/b><b>:<\/b><\/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=\"font-weight: 400; color: #000000;\">I2C drivers should have I2C initialization APIs and separate APIs for I2C Master TX and I2C Master RX; because the master has to initiate the start condition, address phase, etc. <\/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=\"font-weight: 400; color: #000000;\">Since the slave is not going to do all these things, there are separate APIs for I2C Slave TX and I2C Slave RX. <\/span><span style=\"font-weight: 400; color: #000000;\">There is a separate API for master and slave to transmit and receive data. That\u2019s why I2C Master TX, I2C Master RX, I2C Slave TX, and I2C Slave RX are created as shown in Figure 1.<\/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=\"font-weight: 400; color: #000000;\">There are some interrupt handling APIs such as I2C error interrupt handling and I2C event interrupt handling that has to be supported. <\/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=\"font-weight: 400; color: #000000;\">Apart from this, you have to keep the peripheral control, the peripheral clock control, peripheral enable\/ disable, and lots of other peripheral control APIs.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3892\" aria-describedby=\"caption-attachment-3892\" style=\"width: 614px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-3892\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application.png\" alt=\"I2C driver APIs\" width=\"614\" height=\"212\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application.png 1822w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-300x104.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-768x265.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-1024x354.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-600x207.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-120x41.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-500x173.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-200x69.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-400x138.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-800x276.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/configurable-items-for-user-application-1200x414.png 1200w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><figcaption id=\"caption-attachment-3892\" class=\"wp-caption-text\"><span style=\"color: #000000;\">&nbsp;Figure 2. Configurable items for user application.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-size: 25px; font-family: 'Roboto Slab'; font-weight: 400; line-height: 35px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"text-decoration: underline; color: #000080;\"><b>Configurable items for user application:<\/b><\/span><\/p>\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=\"font-weight: 400; color: #000000;\">The configurable items for the user application are as shown in Figure 2.<\/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 style=\"font-weight: 400;\"><span style=\"color: #ff0000;\"><b>I2C_SCLSpeed:<\/b><\/span><span style=\"font-weight: 400;\"><span style=\"color: #ff0000;\">&nbsp;<\/span><span style=\"color: #000000;\">The first configurable item would be user has to mention the SCL speed. Therefore, a Configurational structure with the member element I2C_SCLSpeed is created, where the user can mention SCL speed.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\"><b><span style=\"color: #ff0000;\">I2C_DeviceAddress:<\/span>&nbsp;<\/b><span style=\"font-weight: 400; color: #000000;\">If the device is acting as a slave, a member element I2C_DeviceAddress is created to store the own address or device address given by the user.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"color: #ff0000;\"><b>I2C_ACKControl:<\/b><\/span><span style=\"font-weight: 400;\"><span style=\"color: #000000;\">&nbsp;In the I2C peripheral, automatic acking is disabled by default. Therefore, the member element or configurable item named I2C_ACKControl is given for the user to decide whether acking should be enabled or disabled.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\"><b><span style=\"color: #ff0000;\">I2C_FMDutyCycle:<\/span>&nbsp;<\/b><span style=\"font-weight: 400; color: #000000;\">If the communication speed or serial clock speed is more than 100KHz, it is considered a fast mode. In fast mode, the duty cycle of the clock can be varied. A member element called I2C_FMDutyCycle is created to hold the information of varying duty cycles, where the user can mention the value of the duty cycle when the I2C peripheral is in the fast mode.<\/span><\/li>\n<\/ul>\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=\"font-weight: 400; color: #000000;\">These four are the configurable items for the user application, and the configuration structure is created by taking the information of all these configurable items.<\/span><\/p>\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=\"text-decoration: underline; color: #000080;\"><strong>Exercise<\/strong><\/span><\/p>\n<figure id=\"attachment_3907\" aria-describedby=\"caption-attachment-3907\" style=\"width: 583px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-3907\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/Excercise.png\" alt=\"I2C driver APIs\" width=\"583\" height=\"312\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise.png 1882w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-768x410.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-1024x547.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-600x320.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-500x267.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-200x107.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-400x214.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-800x427.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Excercise-1200x641.png 1200w\" sizes=\"(max-width: 583px) 100vw, 583px\" \/><figcaption id=\"caption-attachment-3907\" class=\"wp-caption-text\">&nbsp; <span style=\"color: #000000;\">Figure 3. Exercise<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/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=\"font-weight: 400; color: #000000;\">Figure 3 has some exercises that you have to do before start writing the driver.<\/span><\/p>\n<ol 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 style=\"font-weight: 400;\"><span style=\"font-weight: 400; color: #000000;\">Create stm32f407xx_i2c_driver.c and stm32f407xx_i2c_driver.h files in driver&#8217;s folder.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400; color: #000000;\">After that, add I2Cx related details such as I2C peripheral register definition structure, I2C base address macros, I2C peripheral definition macros, macros to enable and disable I2C peripheral clocks, and bit position definitions of I2C peripherals to the MCU specific header file.<\/span><\/li>\n<\/ol>\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=\"font-weight: 400; color: #000000;\">After finishing the exercise, the driver.c and driver.h files are created in the IDE, as shown in Figure 4.<\/span><\/p>\n<figure id=\"attachment_3908\" aria-describedby=\"caption-attachment-3908\" style=\"width: 727px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3908\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/Program1.png\" alt=\"I2C driver APIs\" width=\"727\" height=\"387\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1.png 1907w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-768x409.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-1024x545.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-600x319.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-500x266.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-400x213.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-800x426.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Program1-1200x639.png 1200w\" sizes=\"(max-width: 727px) 100vw, 727px\" \/><figcaption id=\"caption-attachment-3908\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\">Figure 4. Creation of driver.c and driver.h files.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/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=\"font-weight: 400; color: #000000;\">Add all the I2C related details in the stm32f407xx.h, which is a device-specific header file.<\/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 style=\"font-weight: 400;\"><span style=\"font-weight: 400; color: #000000;\">First, add the base address, as shown in Figure 5.1.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3909\" aria-describedby=\"caption-attachment-3909\" style=\"width: 731px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3909\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.1.png\" alt=\"I2C driver APIs\" width=\"731\" height=\"387\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-768x407.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1024x543.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-600x318.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-500x265.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-800x424.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.1-1200x636.png 1200w\" sizes=\"(max-width: 731px) 100vw, 731px\" \/><figcaption id=\"caption-attachment-3909\" class=\"wp-caption-text\">Figure 5.1. Base address<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/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=\"font-weight: 400; color: #000000;\">Add the peripheral register definition structure, as shown in Figure 5.2.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3910\" aria-describedby=\"caption-attachment-3910\" style=\"width: 703px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3910\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.2.png\" alt=\"\" width=\"703\" height=\"374\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2.png 1915w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-768x409.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-1024x545.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-600x319.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-500x266.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-400x213.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-800x426.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.2-1200x639.png 1200w\" sizes=\"(max-width: 703px) 100vw, 703px\" \/><figcaption id=\"caption-attachment-3910\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\">Figure 5.2. Peripheral register definition structure.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/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 style=\"font-weight: 400;\"><span style=\"font-weight: 400; color: #000000;\">Add peripheral definition macros, which is as shown in Figure 5.3.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3911\" aria-describedby=\"caption-attachment-3911\" style=\"width: 712px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3911\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.3.png\" alt=\"\" width=\"712\" height=\"377\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-768x407.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1024x543.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-600x318.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-500x265.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-800x424.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.3-1200x636.png 1200w\" sizes=\"(max-width: 712px) 100vw, 712px\" \/><figcaption id=\"caption-attachment-3911\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\">Figure 5.3. Peripheral definition macros.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/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 style=\"font-weight: 400;\"><span style=\"font-weight: 400; color: #000000;\">Add clock enable and disable macros, as shown in Figure 5.4.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_3912\" aria-describedby=\"caption-attachment-3912\" style=\"width: 716px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3912\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.4.png\" alt=\"\" width=\"716\" height=\"382\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4.png 1915w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-768x409.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-1024x546.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-600x320.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-500x267.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-200x107.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-400x213.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-800x427.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.4-1200x640.png 1200w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><figcaption id=\"caption-attachment-3912\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\">Figure 5.4. Clock enable and disable macros.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/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 style=\"font-weight: 400;\"><span style=\"font-weight: 400; color: #000000;\">Next is adding bit position definitions of I2C peripheral. For that, create register bit definition macros for I2C_CR1, I2C_CR2, I2C_SR1, I2C_SR2, and I2C_CCR, as shown in Figure 5.5, 5.6, 5.7, 5.8, and 5.9, respectively.<\/span><\/li>\n<\/ul>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3913\" aria-describedby=\"caption-attachment-3913\" style=\"width: 714px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3913\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.5.png\" alt=\"\" width=\"714\" height=\"376\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5.png 1917w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-300x158.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-768x405.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-1024x540.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-600x316.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-120x63.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-500x264.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-200x105.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-400x211.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-800x422.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.5-1200x633.png 1200w\" sizes=\"(max-width: 714px) 100vw, 714px\" \/><figcaption id=\"caption-attachment-3913\" class=\"wp-caption-text\"><span style=\"color: #000000;\">&nbsp;Figure 5.5. Register bit definition macros for I2C_CR1.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3914\" aria-describedby=\"caption-attachment-3914\" style=\"width: 710px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3914\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.6.png\" alt=\"\" width=\"710\" height=\"377\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6.png 1917w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-768x407.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-1024x543.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-600x318.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-500x265.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-800x424.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.6-1200x637.png 1200w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption id=\"caption-attachment-3914\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\">Figure 5.6. Register bit definition macros for I2C_CR2.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3915\" aria-describedby=\"caption-attachment-3915\" style=\"width: 718px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3915\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.7.png\" alt=\"\" width=\"718\" height=\"381\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7.png 1917w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-768x407.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-1024x543.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-600x318.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-500x265.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-800x424.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.7-1200x637.png 1200w\" sizes=\"(max-width: 718px) 100vw, 718px\" \/><figcaption id=\"caption-attachment-3915\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\"> Figure 5.7. Register bit definition macros for I2C_SR1.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3916\" aria-describedby=\"caption-attachment-3916\" style=\"width: 723px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3916\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.8.png\" alt=\"\" width=\"723\" height=\"382\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-300x158.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-768x405.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-1024x541.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-600x317.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-120x63.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-500x264.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-400x211.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-800x422.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.8-1200x633.png 1200w\" sizes=\"(max-width: 723px) 100vw, 723px\" \/><figcaption id=\"caption-attachment-3916\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\">Figure 5.8. Register bit definition macros for I2C_SR2.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_3917\" aria-describedby=\"caption-attachment-3917\" style=\"width: 735px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3917\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2020\/11\/5.9.png\" alt=\"I2C driver APIs\" width=\"735\" height=\"390\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9.png 1917w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-768x407.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-1024x543.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-600x318.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-500x265.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-800x424.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/5.9-1200x637.png 1200w\" sizes=\"(max-width: 735px) 100vw, 735px\" \/><figcaption id=\"caption-attachment-3917\" class=\"wp-caption-text\">&nbsp;<span style=\"color: #000000;\">Figure 5.9. Register bit definition macros for I2C_CCR.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\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;\">In the following article, let&#8217;s see<\/span> <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"http:\/\/fastbitlab.com\/stm32-i2c-lecture-8-i2c-handle-and-configuration-structure\/\" target=\"_blank\" rel=\"noopener\">l2C handle and configuration structure<\/a><\/span>.<\/p>\n<div class=\"mceTemp\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; I2C driver API requirements &nbsp; In this article, let\u2019s discuss the driver API requirements and user-configurable items for I2C peripherals. &nbsp; I2C driver APIs: I2C drivers should have I2C initialization APIs and separate APIs for I2C Master TX and I2C Master RX; because the master has to initiate the start condition, address phase, etc. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3891,"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-3889","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 7: I2C driver API requirements<\/title>\n<meta name=\"description\" content=\"Explore the essential requirements for I2C driver APIs, including initialization, data transmission\/reception for both master and slave modes\" \/>\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\/driver-api-requirements-and-user-configurable-items\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"STM32 I2C Lecture 7: I2C driver API requirements\" \/>\n<meta property=\"og:description\" content=\"Explore the essential requirements for I2C driver APIs, including initialization, data transmission\/reception for both master and slave modes\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/\" \/>\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-26T06:08:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-05T09:15:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1880\" \/>\n\t<meta property=\"og:image:height\" content=\"886\" \/>\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=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/\"},\"author\":{\"name\":\"FastBitLab\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\"},\"headline\":\"STM32 I2C Lecture 7: I2C driver API requirements\",\"datePublished\":\"2020-11-26T06:08:55+00:00\",\"dateModified\":\"2023-09-05T09:15:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/\"},\"wordCount\":829,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Driver-APT-requirements-for-I2C-peripherals.png\",\"keywords\":[\"STM32 I2C Lectures\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/\",\"name\":\"STM32 I2C Lecture 7: I2C driver API requirements\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Driver-APT-requirements-for-I2C-peripherals.png\",\"datePublished\":\"2020-11-26T06:08:55+00:00\",\"dateModified\":\"2023-09-05T09:15:07+00:00\",\"description\":\"Explore the essential requirements for I2C driver APIs, including initialization, data transmission\\\/reception for both master and slave modes\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#primaryimage\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Driver-APT-requirements-for-I2C-peripherals.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Driver-APT-requirements-for-I2C-peripherals.png\",\"width\":1880,\"height\":886,\"caption\":\"Figure 1. Driver API requirements for I2C peripherals.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/driver-api-requirements-and-user-configurable-items\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32 I2C Lecture 7: I2C driver API requirements\"}]},{\"@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 7: I2C driver API requirements","description":"Explore the essential requirements for I2C driver APIs, including initialization, data transmission\/reception for both master and slave modes","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\/driver-api-requirements-and-user-configurable-items\/","og_locale":"en_US","og_type":"article","og_title":"STM32 I2C Lecture 7: I2C driver API requirements","og_description":"Explore the essential requirements for I2C driver APIs, including initialization, data transmission\/reception for both master and slave modes","og_url":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/","og_site_name":"FastBit EBA","article_publisher":"https:\/\/www.facebook.com\/fastbiteba\/","article_published_time":"2020-11-26T06:08:55+00:00","article_modified_time":"2023-09-05T09:15:07+00:00","og_image":[{"width":1880,"height":886,"url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.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":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#article","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/"},"author":{"name":"FastBitLab","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d"},"headline":"STM32 I2C Lecture 7: I2C driver API requirements","datePublished":"2020-11-26T06:08:55+00:00","dateModified":"2023-09-05T09:15:07+00:00","mainEntityOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/"},"wordCount":829,"commentCount":2,"publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.png","keywords":["STM32 I2C Lectures"],"articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/","url":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/","name":"STM32 I2C Lecture 7: I2C driver API requirements","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#primaryimage"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.png","datePublished":"2020-11-26T06:08:55+00:00","dateModified":"2023-09-05T09:15:07+00:00","description":"Explore the essential requirements for I2C driver APIs, including initialization, data transmission\/reception for both master and slave modes","breadcrumb":{"@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#primaryimage","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2020\/11\/Driver-APT-requirements-for-I2C-peripherals.png","width":1880,"height":886,"caption":"Figure 1. Driver API requirements for I2C peripherals."},{"@type":"BreadcrumbList","@id":"https:\/\/fastbitlab.com\/blog\/driver-api-requirements-and-user-configurable-items\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fastbitlab.com\/blog\/"},{"@type":"ListItem","position":2,"name":"STM32 I2C Lecture 7: I2C driver API requirements"}]},{"@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\/3889","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=3889"}],"version-history":[{"count":5,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/3889\/revisions"}],"predecessor-version":[{"id":15780,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/3889\/revisions\/15780"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media\/3891"}],"wp:attachment":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media?parent=3889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/categories?post=3889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/tags?post=3889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}