{"id":460,"date":"2017-11-24T23:44:34","date_gmt":"2017-11-24T22:44:34","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=460"},"modified":"2017-12-30T19:38:07","modified_gmt":"2017-12-30T18:38:07","slug":"64-i2c_slave-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/64-i2c_slave-library-stm32f4\/","title":{"rendered":"64-I2C_Slave-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/63-onewire_ds18xx-library-stm32f4\/\" title=\"63-OneWire_DS18XX-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 63-OneWire_DS18XX-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/65-spi_lolevel_halfduplex-library-stm32f4\/\" title=\"65-SPI_LoLevel_HalfDuplex-Library (STM32F4)\">65-SPI_LoLevel_HalfDuplex-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library kann der STM32F4 als I2C-Slave eingesetzt werden.<\/p>\n<p>Der Slave simuliert ein 256-Byte gro\u00dfes I2C-RAM. Die I2C-Funktionen laufen per Interrupt ab. Es gibt zwei Funktionen f\u00fcr read\/write vom internen RAM.<\/p>\n<p>Ein I2C-Master kann per I2C-Write ein Byte in das interne RAM vom Slave speichern und per I2C-Read ein Byte aus dem RAM vom Slave auslesen.<\/p>\n<p>Im Beispiel wartet der Slave solange, bis ein Master per I2C in die RAM-Adresse 0\u00d700 den Wert 0\u00d712 geschrieben hat, dann wird die gr\u00fcne LED eingeschaltet.<\/p>\n<p>die I2C-Pins die benutzt werden sollen, m\u00fcssen im C-File eingetragen werden<br \/>\n(im H-File kann die I2C-Clock-Frq und die Gr\u00f6\u00dfe vom RAM eingestellt werden)<\/p>\n<p>auf der Hardware d\u00fcrfen die zwei externen Pull-Up Widerst\u00e4nde (je 4k7) an SCL und SDA nicht vergessen werden, sonst funktioniert das ganze nicht.<\/p>\n<p>es gibt 3 identische Librarys, getrennt f\u00fcr I2C1, I2C2 und I2C3<\/p>\n<p>im Beispiel wurde I2C1 benutzt mit dieser Pinbelegung :<\/p>\n<pre lang=\"c\" line=\"1\">SCL an PB6\r\nSDA an PB7<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, I2C, MISC\r\nBenutzte Librarys : keine<\/pre>\n<p><strong><strong>Funktionen (f\u00fcr I2C1) :<\/strong><\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_I2C1_Slave_Init(uint8_t slave_adr);              \/\/ zum init als I2C-Slave\r\nuint8_t UB_I2C1_Slave_ReadByte(uint8_t adr);             \/\/ zum lesen vom RAM\r\nvoid UB_I2C1_Slave_WriteByte(uint8_t adr, uint8_t wert); \/\/ zum schreiben in das RAM<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 03.10.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.4\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der I2C-Slave-Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_led.h\"\r\n#include \"stm32_ub_i2c1_slave.h\"\r\n\r\nint main(void)\r\n{\r\n  uint8_t wert;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ Init der LEDs\r\n  UB_Led_Init();\r\n\r\n  \/\/ Init vom I2C-1 als Slave mit Adresse 0x70\r\n  UB_I2C1_Slave_Init(0x70);\r\n\r\n  while(1)\r\n  {\r\n    \/\/ Wert vom RAM an Adresse 0x00 auslesen\r\n    wert=UB_I2C1_Slave_ReadByte(0x00);\r\n    \/\/ LEDs je nach Inhalt schalten\r\n    if(wert==0x12) {\r\n      UB_Led_On(LED_GREEN);\r\n      UB_Led_Off(LED_RED);\r\n    }\r\n    else {\r\n      UB_Led_On(LED_RED);\r\n      UB_Led_Off(LED_GREEN);\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/10\/ub_stm32f4_i2c_slave_v100.zip\">ub_stm32f4_i2c_slave_v100<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/10\/Demo_64_I2C_Slave.zip\">Demo_64_I2C_Slave<\/a><\/p>\n<hr \/>\n<h3 id=\"comments-title\">2 Antworten auf <em>64-I2C_Slave-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-912\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-912\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/ab3e500301d665e535442fc768be73a2?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Christian<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">26. Oktober 2013 um 10:55<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<br \/>\nvielen Dank f\u00fcr das gute Beispiel!<br \/>\nMir ist es gelungen mit einem I2C_Master Bytes in das RAM des I2C_Slaves zu schreiben aber nicht wieder auszulesen.<br \/>\nW\u00e4re es m\u00f6glich den passenden I2C_MasterCode zum auslesen des RAMs zu posten?<\/p>\n<p>Danke im Voraus.<br \/>\nMfg<br \/>\nChristian<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-913\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-913\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">26. Oktober 2013 um 21:07<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>es gibt schon eine I2C-Master-Library hier : <a href=\"index67ea.html?page_id=720\" rel=\"nofollow\">http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=720<\/a><br \/>\nversuch es mal mit der, zum lesen von einem Byte aus dem RAM vom Slave :<\/p>\n<pre lang=\"c\" line=\"1\">wert=UB_I2C1_ReadByte(0x70,0x0); \/\/ auslesen von Adresse-0\r\n<\/pre>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library kann der STM32F4 als I2C-Slave eingesetzt werden. Der Slave simuliert ein 256-Byte gro\u00dfes I2C-RAM. Die I2C-Funktionen laufen per Interrupt ab. Es gibt zwei Funktionen f\u00fcr read\/write vom internen RAM. Ein I2C-Master kann per I2C-Write ein Byte in &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/64-i2c_slave-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":64,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[98,213,9,7],"class_list":["post-460","page","type-page","status-publish","hentry","category-stm32f4","tag-i2c","tag-i2c-slave","tag-library","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/460","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=460"}],"version-history":[{"count":3,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/460\/revisions"}],"predecessor-version":[{"id":1603,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/460\/revisions\/1603"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=460"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}