{"id":4908,"date":"2021-01-13T08:42:46","date_gmt":"2021-01-13T08:42:46","guid":{"rendered":"http:\/\/fastbitlab.com\/?p=4908"},"modified":"2022-11-23T10:22:03","modified_gmt":"2022-11-23T04:52:03","slug":"i2c-slave-programming-discussion","status":"publish","type":"post","link":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/","title":{"rendered":"STM32 I2C Lecture 55: I2C slave programming discussion"},"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: 0px; 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=\"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<div class=\"\">\n<h1 class=\"\" style=\"text-align: center; font-size: 32px; border-width: 0px; line-height: 50px;\"><span style=\"color: #000080;\">I2C slave programming discussion<\/span><\/h1>\n<div class=\"row bg-editor-hr-wrap\" style=\"border-width: 0px; margin-top: -25px;\">\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 color2-color\" style=\"border-style: solid; border-width: 0px 0px 3px;\"><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\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;\">In this article, let\u2019s understand how to program for I2C slave.&nbsp;<\/span><\/p>\n<p class=\"\" style=\"border-width: 0px; 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;\">Now let\u2019s change the mode (Figure 1). For example, consider the Arduino board as master and STM32 as a slave device.<\/span><\/p>\n<figure id=\"attachment_4905\" aria-describedby=\"caption-attachment-4905\" style=\"width: 744px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-4905\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-1-5.png\" alt=\"I2C slave programming discussion\" width=\"744\" height=\"224\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5.png 1621w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-300x90.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-768x231.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-1024x308.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-600x180.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-120x36.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-500x150.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-200x60.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-400x120.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-800x240.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5-1200x361.png 1200w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><figcaption id=\"caption-attachment-4905\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 1. Master slave communication.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\"><span style=\"color: #000000;\"><b>Differences between the I2C master and the I2C slave (Figure 2):<\/b><\/span><\/p>\n<figure id=\"attachment_4906\" aria-describedby=\"caption-attachment-4906\" style=\"width: 744px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-4906\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-2-5.png\" alt=\"I2C slave programming discussion\" width=\"744\" height=\"275\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5.png 1483w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-300x111.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-768x284.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-1024x378.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-600x222.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-120x44.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-500x185.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-200x74.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-400x148.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-800x296.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-2-5-1200x443.png 1200w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><figcaption id=\"caption-attachment-4906\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 2. Difference between I2C master and slave.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-4931\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/1.png\" alt=\"\" width=\"672\" height=\"363\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/1.png 672w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/1-300x162.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/1-600x324.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/1-120x65.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/1-500x270.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/1-200x108.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/1-400x216.png 400w\" sizes=\"(max-width: 672px) 100vw, 672px\" \/><\/p>\n<div class=\"fusion-table table-1\"><\/div>\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=\"font-weight: 400; color: #000000;\">For example, when the I2C master executes a read transaction, that is nothing but a request for data. It indicates that the master wants to read some data from the slave. When an I2C master executes or initiates a write transaction, that is nothing but a receive data for the slave.&nbsp;<\/span><\/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=\"font-weight: 400; color: #000000;\">The slave has to serve only two events, one is request for data, which is nothing but a read transaction from the master and another event is receive data, which happens whenever an I2C master wants to write some data to the slave. Therefore, in the I2C slave code, you have to receive only two events. They are &#8211; request for data and receive data, and then the action is taken according to the event received.<\/span><\/p>\n<ol 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=\"\">\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400; color: #000000;\">You have to create a send data API to request data from the master.&nbsp;<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400; color: #000000;\">You have to create a receive data API to receive the data from the master.<\/span><\/li>\n<\/ol>\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;\">In slave mode, the I2C driver (STM32 I2C driver) will send a request for data and receive data events to the slave application, as shown in Figure 3. Once the application receives a request for data, it will send the data and then receives the data from the master.<\/span><\/p>\n<figure id=\"attachment_4918\" aria-describedby=\"caption-attachment-4918\" style=\"width: 744px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4918\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-3-4.png\" alt=\"I2C slave programming discussion\" width=\"744\" height=\"335\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4.png 1703w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-300x135.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-768x346.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-1024x461.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-600x270.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-120x54.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-500x225.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-200x90.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-400x180.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-800x360.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-3-4-1200x540.png 1200w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><figcaption id=\"caption-attachment-4918\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 3. Events received by the slave.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"border-width: 0px; 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;\">Now let\u2019s create the APIs for a request for data and receive data events.&nbsp;<\/span><\/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=\"text-decoration: underline; color: #000080;\"><b>Steps:<\/b><\/span><\/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=\"font-weight: 400; color: #000000;\">1. Go to the driver.h file and create a prototype of APIs for request for data and receive data events, as shown in Figure 4.<\/span><\/p>\n<figure id=\"attachment_4919\" aria-describedby=\"caption-attachment-4919\" style=\"width: 742px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4919\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-4-4.png\" alt=\"I2C slave programming discussion\" width=\"742\" height=\"395\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4.png 1917w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-768x408.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-1024x544.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-600x319.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-500x266.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-400x213.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-800x425.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-4-4-1200x638.png 1200w\" sizes=\"(max-width: 742px) 100vw, 742px\" \/><figcaption id=\"caption-attachment-4919\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 4. Prototype of the APIs.<\/span><\/figcaption><\/figure>\n<p>&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=\"font-weight: 400; color: #000000;\">2. Whenever the request is received, then only the slave will send the data. The length and other information passed as the arguments of the API are not necessary since the slave sends the data byte by byte. Therefore, remove all the things passed as an argument of I2C_SlaveSendData() API shown in Figure 4.<\/span><\/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=\"font-weight: 400; color: #000000;\">The I2C_SlaveSendData() API will accept only two parameters (Figure 5), one is the I2C RegDef pointer, and another is the value or data to be sent.<\/span><\/p>\n<figure id=\"attachment_4920\" aria-describedby=\"caption-attachment-4920\" style=\"width: 744px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4920\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-5-4.png\" alt=\"I2C slave programming discussion\" width=\"744\" height=\"397\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4.png 1921w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-768x410.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-1024x546.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-600x320.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-500x267.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-200x107.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-400x213.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-800x427.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-5-4-1200x640.png 1200w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><figcaption id=\"caption-attachment-4920\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 5. Prototype of I2C_SlaveSendData() API.<\/span><\/figcaption><\/figure>\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;\">3.&nbsp;<span style=\"font-weight: 400;\">Whenever a receive data event is received from the master, a slave is going to receive the data. Therefore, you don\u2019t need pass length and other information only pass I2C RegDef pointer as a parameter of I2C_SlaveReceiveData() API, as shown in Figure 6. <\/span><\/span><\/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;\"><span style=\"font-weight: 400;\">Since I2C_SlaveReceiveData() API returns the data received from the master, the return type will be uint8_t.<\/span><\/span><\/p>\n<figure id=\"attachment_4921\" aria-describedby=\"caption-attachment-4921\" style=\"width: 744px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4921\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-6-4.png\" alt=\"I2C slave programming discussion\" width=\"744\" height=\"395\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-300x159.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-768x408.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-1024x544.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-600x319.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-500x266.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-200x106.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-400x212.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-800x425.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-6-4-1200x637.png 1200w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><figcaption id=\"caption-attachment-4921\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 6. Prototype of I2C_SlaveReceiveData() API.<\/span><\/figcaption><\/figure>\n<p>&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=\"font-weight: 400; color: #000000;\">4. Implement the I2C_SlaveSendData() and I2C_SlaveReceiveData() APIs in the driver.c file before I2C event IRQ handling.<\/span><\/p>\n<p class=\"\" style=\"font-size: 23px; border-width: 0px; 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;\"><strong>Steps of implementation:<\/strong><\/span><\/p>\n<ul 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=\"\">\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400; color: #000000;\">In the I2C_SlaveSendData() API, load the data into the DR (Data register), as shown in Figure 7 since you have to send the data.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_4922\" aria-describedby=\"caption-attachment-4922\" style=\"width: 744px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4922\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-7-4.png\" alt=\"Implementation of I2C_SlaveSendData() API\" width=\"744\" height=\"398\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4.png 1917w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-768x411.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-1024x548.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-600x321.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-500x267.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-200x107.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-400x214.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-800x428.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-7-4-1200x642.png 1200w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><figcaption id=\"caption-attachment-4922\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 7. Implementation of I2C_SlaveSendData() API.<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<ul 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=\"\">\n<li><span style=\"font-weight: 400; color: #000000;\">In the I2C_SlaveReceiveData() API, you just have to return the data. Therefore, return the content of the data register, as shown in Figure 8.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_4923\" aria-describedby=\"caption-attachment-4923\" style=\"width: 745px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4923\" src=\"http:\/\/fastbitlab.com\/wp-content\/uploads\/2021\/01\/Figure-8-3.png\" alt=\"Implementation of I2C_SlaveReceiveData() API\" width=\"745\" height=\"398\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-300x160.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-768x410.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-1024x547.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-600x320.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-120x64.png 120w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-500x267.png 500w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-200x107.png 200w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-400x214.png 400w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-800x427.png 800w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-8-3-1200x641.png 1200w\" sizes=\"(max-width: 745px) 100vw, 745px\" \/><figcaption id=\"caption-attachment-4923\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 8. Implementation of I2C_SlaveReceiveData() API.<\/span><\/figcaption><\/figure>\n<p class=\"\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"border-width: 0px; font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 28px;\" 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: #ff6600;\"><a style=\"color: #ff6600; text-decoration: underline;\" href=\"http:\/\/fastbitlab.com\/stm32-i2c-lecture-56-i2c-transfer-sequence-diagram-for-slave-transmitter\/\" target=\"_blank\" rel=\"noopener\">I2C transfer sequence diagram for slave transmitter.<\/a><\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"border-width: 0px; font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 25px;\" 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;\"><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 class=\"col-md-5 col-sm-6 col-xs-12 col-lg-5\">\n<div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; I2C slave programming discussion &nbsp; &nbsp; In this article, let\u2019s understand how to program for I2C slave.&nbsp; Now let\u2019s change the mode (Figure 1). For example, consider the Arduino board as master and STM32 as a slave device. &nbsp; Differences between the I2C master and the I2C slave (Figure 2): &nbsp; &nbsp; For example, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4905,"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-4908","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 55: I2C slave programming discussion<\/title>\n<meta name=\"description\" content=\"I2C slave programming discussion. In this article, let\u2019s understand how to program for I2C slave. Now let\u2019s change the mode (Figure 1).\" \/>\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\/i2c-slave-programming-discussion\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"STM32 I2C Lecture 55: I2C slave programming discussion\" \/>\n<meta property=\"og:description\" content=\"I2C slave programming discussion. In this article, let\u2019s understand how to program for I2C slave. Now let\u2019s change the mode (Figure 1).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/\" \/>\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=\"2021-01-13T08:42:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-23T04:52:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1621\" \/>\n\t<meta property=\"og:image:height\" content=\"487\" \/>\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=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/\"},\"author\":{\"name\":\"FastBitLab\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\"},\"headline\":\"STM32 I2C Lecture 55: I2C slave programming discussion\",\"datePublished\":\"2021-01-13T08:42:46+00:00\",\"dateModified\":\"2022-11-23T04:52:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/\"},\"wordCount\":683,\"commentCount\":6,\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Figure-1-5.png\",\"keywords\":[\"STM32 I2C Lectures\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/\",\"name\":\"STM32 I2C Lecture 55: I2C slave programming discussion\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Figure-1-5.png\",\"datePublished\":\"2021-01-13T08:42:46+00:00\",\"dateModified\":\"2022-11-23T04:52:03+00:00\",\"description\":\"I2C slave programming discussion. In this article, let\u2019s understand how to program for I2C slave. Now let\u2019s change the mode (Figure 1).\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#primaryimage\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Figure-1-5.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Figure-1-5.png\",\"width\":1621,\"height\":487,\"caption\":\"Figure 1. Master slave communication.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/i2c-slave-programming-discussion\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32 I2C Lecture 55: I2C slave programming discussion\"}]},{\"@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 55: I2C slave programming discussion","description":"I2C slave programming discussion. In this article, let\u2019s understand how to program for I2C slave. Now let\u2019s change the mode (Figure 1).","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\/i2c-slave-programming-discussion\/","og_locale":"en_US","og_type":"article","og_title":"STM32 I2C Lecture 55: I2C slave programming discussion","og_description":"I2C slave programming discussion. In this article, let\u2019s understand how to program for I2C slave. Now let\u2019s change the mode (Figure 1).","og_url":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/","og_site_name":"FastBit EBA","article_publisher":"https:\/\/www.facebook.com\/fastbiteba\/","article_published_time":"2021-01-13T08:42:46+00:00","article_modified_time":"2022-11-23T04:52:03+00:00","og_image":[{"width":1621,"height":487,"url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5.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":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#article","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/"},"author":{"name":"FastBitLab","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d"},"headline":"STM32 I2C Lecture 55: I2C slave programming discussion","datePublished":"2021-01-13T08:42:46+00:00","dateModified":"2022-11-23T04:52:03+00:00","mainEntityOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/"},"wordCount":683,"commentCount":6,"publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5.png","keywords":["STM32 I2C Lectures"],"articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/","url":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/","name":"STM32 I2C Lecture 55: I2C slave programming discussion","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#primaryimage"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5.png","datePublished":"2021-01-13T08:42:46+00:00","dateModified":"2022-11-23T04:52:03+00:00","description":"I2C slave programming discussion. In this article, let\u2019s understand how to program for I2C slave. Now let\u2019s change the mode (Figure 1).","breadcrumb":{"@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#primaryimage","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2021\/01\/Figure-1-5.png","width":1621,"height":487,"caption":"Figure 1. Master slave communication."},{"@type":"BreadcrumbList","@id":"https:\/\/fastbitlab.com\/blog\/i2c-slave-programming-discussion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fastbitlab.com\/blog\/"},{"@type":"ListItem","position":2,"name":"STM32 I2C Lecture 55: I2C slave programming discussion"}]},{"@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\/4908","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=4908"}],"version-history":[{"count":5,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/4908\/revisions"}],"predecessor-version":[{"id":12592,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/4908\/revisions\/12592"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media\/4905"}],"wp:attachment":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media?parent=4908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/categories?post=4908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/tags?post=4908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}