{"id":448,"date":"2017-11-24T23:33:24","date_gmt":"2017-11-24T22:33:24","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=448"},"modified":"2017-12-31T01:26:23","modified_gmt":"2017-12-31T00:26:23","slug":"59-can_lolevel-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/59-can_lolevel-library-stm32f4\/","title":{"rendered":"59-CAN_LoLevel-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\/58-backup_ram-library-stm32f4\/\" title=\"58-Backup_RAM-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 58-Backup_RAM-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\/60-can_mcp25050-library-stm32f4\/\" title=\"60-CAN_MCP25050-Library (STM32F4)\">60-CAN_MCP25050-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>mit dieser Library kann die CAN-Schnittstelle vom STM32F4 benutzt werden<\/p>\n<p>die CAN-Pins die benutzt werden sollen, m\u00fcssen im C-File eingetragen werden<br \/>\n(im H-File kann die CAN-Baudrate eingestellt werden)<\/p>\n<p>es gibt zwei identische Librarys, getrennt f\u00fcr CAN-1 und CAN-2<\/p>\n<p>die Filter-Funktionen vom STM32F4 sind sehr Umfangreich. Ich habe versucht alles so einfach wie m\u00f6glich zu halten, aber es wurden trotzdem 4 Funktionen.<br \/>\n(Beschreibung siehe unten)<\/p>\n<p>es k\u00f6nnen CAN-Frames in den 4 Modes :<br \/>\n[standard_Data, standard_Remote, extended_Data, extended_Remote]<br \/>\ngesendet und empfangen werden<\/p>\n<p>es muss ein externer CAN-Transeiver-IC angeschlossen werden (z.B. SN65HVD230D) und der Terminations-Widerstand (120 Ohm) f\u00fcr den BUS darf nicht vergessen werden.<\/p>\n<p><strong>Filterbeschreibung :<\/strong><\/p>\n<p>Die Filter dienen dazu um CAN-Frames die f\u00fcr die CPU nicht wichtig sind wegzufiltern. Es k\u00f6nnen Filter f\u00fcr \u201cstandard\u201d und \u201cextended\u201d CAN-Frames gesetzt werden.<br \/>\nDirekt nach der Init Funktion sind keine Filter aktiv und alle Frames werden empfangen.<\/p>\n<p>F\u00fcr CAN1 k\u00f6nnen bis zu 14 Filter eingerichtet werden (Nr. 0\u202613)<br \/>\nF\u00fcr CAN2 k\u00f6nen bis zu 14 Filter eingerichtet werden (Nr. 14 bis 27)<\/p>\n<p><span style=\"text-decoration: underline;\">Filter-Liste<\/span> : alle empfangenen CAN-Frames werden mit den Eintr\u00e4gen in der Liste verglichen, wenn die ID+Mode \u00fcbereinstimmt landet der Frame im Empfangspuffer.<\/p>\n<p>dieser Filter kann man dann einsetzen, wenn man einzelne CAN-IDs freigeben will.<br \/>\n(z.B. 4 einzelne IDs : 0\u00d7123, 0\u00d7463, 0\u00d7228, 0\u00d7447)<\/p>\n<p><span style=\"text-decoration: underline;\">Filter-Maske<\/span> : alle empfangenen CAN-Frames werden mit einer Maske versehen und dann mit der ID+Mode verglichen, bei \u00dcbereinstimmung landet der Frame im Empfangspuffer.<\/p>\n<p>Alle Bits die in der Maske auf \u20191\u2032 stehen, m\u00fcssen mit der ID \u00fcbereinstimmen.<br \/>\nAlle Bits die in der Maske auf \u20190\u2032 stehen, k\u00f6nnen einen beliebigen wert haben.<\/p>\n<p>diesen Filter kann man dann einsetzen, wenn man ganze ID-Bl\u00f6cke freigeben will.<br \/>\n(z.B. 16 IDs : 0\u00d7120 bis 0x12F)<\/p>\n<p><strong>Bilder :<\/strong><\/p>\n<div id=\"gallery-1\" class=\"gallery galleryid-2400 gallery-columns-3 gallery-size-thumbnail\">\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"can1\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/can1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/can1-150x150.jpg\" alt=\"Schaltplan\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">Schaltplan<\/dd>\n<\/dl>\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"can2\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/can2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/can2-150x150.jpg\" alt=\"Transeiver\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">Transeiver<\/dd>\n<\/dl>\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"can3\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/can3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/can3-150x150.jpg\" alt=\"an der STAMP\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">an der STAMP<\/dd>\n<\/dl>\n<p><br style=\"clear: both;\" \/><\/p>\n<\/div>\n<p>im Beispiel wurde CAN-1 mit dieser Pin-Belegung benutzt :<\/p>\n<pre lang=\"c\" line=\"1\">CAN_TX an PB9\r\nCAN_RX an PB8<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, CAN, MISC\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Enumerationen (f\u00fcr CAN1) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  CAN1_STD_DATA =0, \/\/ standard Daten-Frame\r\n  CAN1_STD_REMOTE,  \/\/ standard Remote-Frame\r\n  CAN1_EXT_DATA,    \/\/ extended Daten-Frame\r\n  CAN1_EXT_REMOTE   \/\/ extended Remote-Frame\r\n}CAN1_FRAME_MODE_t;<\/pre>\n<p><strong>:<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  CAN1_RX_EMPTY =0,  \/\/ noch kein CAN-Frame empfangen\r\n  CAN1_RX_READY      \/\/ CAN-Frame wurde empfangen\r\n}CAN1_STATUS_t;<\/pre>\n<p><strong>TX-Struktur :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef struct {\r\n  uint32_t can_id;    \/\/ STD=11bit  EXT=29bit\r\n  uint8_t anz_bytes;  \/\/ anzahl der daten [0...8]\r\n  uint8_t data[8];    \/\/ datenbytes\r\n}CAN1_TX_FRAME_t;<\/pre>\n<p><strong>RX-Struktur :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef struct {\r\n  CAN1_FRAME_MODE_t frame_mode;    \/\/ Frame-Mode\r\n  uint32_t can_id;    \/\/ STD=11bit  EXT=29bit\r\n  uint8_t anz_bytes;  \/\/ anzahl der daten [0...8]\r\n  uint8_t data[8];    \/\/ datenbytes\r\n}CAN1_RX_FRAME_t;<\/pre>\n<p><strong>Funktionen (f\u00fcr CAN1) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_CAN1_Init(void);                                       \/\/ zum init der CAN-Schnittstelle\r\nErrorStatus UB_CAN1_send_std_data(CAN1_TX_FRAME_t tx_frame);   \/\/ zum senden von standard data frames\r\nErrorStatus UB_CAN1_send_std_remote(CAN1_TX_FRAME_t tx_frame); \/\/ zum senden von standard remote frames\r\nErrorStatus UB_CAN1_send_ext_data(CAN1_TX_FRAME_t tx_frame);   \/\/ zum senden von extended data frames\r\nErrorStatus UB_CAN1_send_ext_remote(CAN1_TX_FRAME_t tx_frame); \/\/ zum senden von extended remote Frames\r\nCAN1_STATUS_t UB_CAN1_receive(CAN1_RX_FRAME_t *rx_frame);      \/\/ zum empfangen von Frames<\/pre>\n<p><strong>Filter-Funktionen (f\u00fcr CAN1) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_CAN1_std_FilterList(CAN1_STD_FL_t filter, uint8_t nr); \/\/ 1...4 Filter f\u00fcr std-ID\r\nvoid UB_CAN1_std_FilterMask(CAN1_STD_FM_t filter, uint8_t nr); \/\/ 1..2 Filter+Maske f\u00fcr std-ID\r\nvoid UB_CAN1_ext_FilterList(CAN1_EXT_FL_t filter, uint8_t nr); \/\/ 1..2 Filter f\u00fcr ext-ID\r\nvoid UB_CAN1_ext_FilterMask(CAN1_EXT_FM_t filter, uint8_t nr); \/\/ 1 Filter+Maske f\u00fcr ext-ID<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 14.09.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 CAN-LoLevel-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_can1.h\"\r\n\r\nint main(void)\r\n{\r\n  uint32_t delay=0;\r\n  uint8_t wert=0;\r\n  CAN1_TX_FRAME_t myTXFrame; \/\/ Puffer f\u00fcr TX-Daten\r\n  CAN1_RX_FRAME_t myRXFrame; \/\/ Puffer f\u00fcr RX-Daten\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 CAN-1 (an PB8+PB9)\r\n  UB_CAN1_Init();\r\n\r\n  while(1)\r\n  {\r\n    \/\/---------------------------\r\n    \/\/ senden\r\n    \/\/---------------------------\r\n    delay++;\r\n    if(delay&gt;5000000) {\r\n      \/\/ zyklisch ein CAN-Telegramm senden\r\n      delay=0;\r\n      UB_Led_Toggle(LED_GREEN);\r\n      \/\/ telegramm erstellen\r\n      myTXFrame.can_id=0x123; \/\/ ID ist egal\r\n      myTXFrame.anz_bytes=1;  \/\/ ein Datenbyte wird gesendet\r\n      myTXFrame.data[0]=wert; \/\/ Datenwert\r\n      \/\/ Frame senden\r\n      UB_CAN1_send_std_data(myTXFrame);\r\n      \/\/ Datenwert wird nach jedem senden incrementiert\r\n      wert++;\r\n    }\r\n\r\n    \/\/---------------------------\r\n    \/\/ empfangen\r\n    \/\/---------------------------\r\n    if(UB_CAN1_receive(&amp;myRXFrame)==CAN1_RX_READY) {\r\n      \/\/ es wurde etwas empfangen\r\n      UB_Led_Toggle(LED_BLUE);\r\n      \/\/ Datenbyte auswerten (nur als Demo)\r\n      if((myRXFrame.data[0]&amp;0x02)!=0) {\r\n        \/\/ beim empfangenen Datenwert ist das Bit1 gesetzt\r\n        UB_Led_Toggle(LED_RED);\r\n      }\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\/09\/ub_stm32f4_can_v102.zip\">ub_stm32f4_can_v102<\/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\/09\/Demo_59_CAN_LoLevel.zip\">Demo_59_CAN_LoLevel<\/a><\/p>\n<hr \/>\n<h3 id=\"comments-title\">13 Antworten auf <em>59-CAN_LoLevel-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1539\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1539\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7300871e7a12430d8f61947fe3d88d32?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Gorka<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">10. April 2014 um 10:03<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Super Arbeit. Danke sehr.<br \/>\nIch habe hier viel gelernt\u2026<br \/>\nSeit ein Paar Tage versuche ich CAN und USB gleichzeitig zu nutzen, aber es sieht, das beide libs nicht kompatibel sind\u2026 CAN schnittstelle functioniert einwandfrei bis man einen USB Stick anschlie\u00dft. Und beide, CAN und USB libs funktionieren bei mir ohne Probleme, aber nur getrennt\u2026<br \/>\nHast du es irgendwann zuf\u00e4lligerweise probiert?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1542\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1542\">\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\">10. April 2014 um 20:57<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Beim STM32F1 geht die Kombination nicht\u2026beim F4 m\u00fcsste es eigentlich laufen, habe es aber selbst nicht ausprobiert.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1586\" class=\"comment even depth-3\">\n<div id=\"comment-1586\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7300871e7a12430d8f61947fe3d88d32?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Gorka<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">24. April 2014 um 14:28<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo nochmals,<br \/>\nich kapiere leider noch nicht warum beide Beispiele, CAN und USB_HOST, beim F4DISCOVERY nicht kompatible sind\u2026 Beide funktionieren ohne Probleme aber sobald ich beide CooCox Projekte fusioniere, l\u00e4uft CAN nur bis ich den USB Stick einschlie\u00dfe und danach nicht mehr. Test-Datei \u201eUSB_File.txt\u201d wird generiert, aber auch nur das erste Mal, dass den USB Stick eingeschlossen wird\u2026 Hat jemand Ahnung, warum es sein kann?<br \/>\nDanke sehr!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1673\" class=\"comment odd alt depth-4\">\n<div id=\"comment-1673\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7300871e7a12430d8f61947fe3d88d32?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Gorka<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">9. Mai 2014 um 14:10<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>SOLVED: Ich habe den STM Board einfach per USB eingeschaltet, aber mein Laptop gibt nicht genug Strom um USB und CAN gleichzeitig nutzen zu k\u00f6nnen, und deswegen funktionierten beide nicht gleichzeitig\u2026 verr\u00fcckt! <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_wink.gif\" alt=\";-)\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1579\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-1579\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/625702eca5e97b3d3fd6d03d67670111?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\">Tine<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">22. April 2014 um 14:56<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Deine Website ist super. Daumen hoch.<br \/>\nMeine Frage ist, ob es m\u00f6glich ist mit dem F4 per CAN im DMA-Mode zu senden und empfangen. Mit der UART ist das problemlos m\u00f6glich. Aber auch mit CAN?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1581\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1581\">\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\">22. April 2014 um 19:51<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>so wie ich das im RefManual gesehen habe nicht.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1907\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1907\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/0c8491f9f120e6aebdda6321e0df883b?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\">Niko<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">25. Juni 2014 um 14:03<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Ich m\u00f6chte mal ein Dankesch\u00f6n f\u00fcr diese Arbeit aussprechen, die du hier geleistet hast. Deine ganzen Beispiele haben es mir erm\u00f6glicht, innerhalb kurzer Zeit das STM32F4 Discovery Board zu verstehen und damit einen CAN Bus aufzubauen.<br \/>\nDas war und ist definitiv eine gro\u00dfe Unterst\u00fctzung gewesen <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":)\" \/><\/p>\n<p>MfG<br \/>\nNiko<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-2673\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-2673\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/597b25be7dc9bc480cf0508d9a9b1c88?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">R.<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">11. Dezember 2014 um 13:20<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<br \/>\nzun\u00e4chst m\u00f6chte ich mich f\u00fcr diese super Seite bei dir bedanken! Hat mir schon viel weitergeholfen.<\/p>\n<p>Im Moment versuche ich gerade an meinem STM32F4 Disco Board den CAN in Betrieb zu nehmen, allerdings habe ich folgendes Problem:<\/p>\n<p>Ich habe zum Testen deine CAN_LO_Level Demo heruntergeladen und kompiliert. Alles prima soweit. Wenn ich nun aber ein Oszi an die beiden CAN Pins h\u00e4nge (PB8 + PB9) kommen da einfach nur dauerhaft ~3 V raus.<\/p>\n<p>Dann hab ich gesehen, dass du schreibst ein externer Transciever sollte dran sein, also hab ich den ISO1050 den ich im Projekt verwenden m\u00f6chte dran geh\u00e4ngt, inkl. 120 Ohm Abschlusswiderstand und dann gemessen. Nun komen aus den beiden Pins dauerhaft ~ 1,6 V raus, aber ein Signal kann ich leider nicht erkennen.<\/p>\n<p>Kannst du mir da weiterhelfen?<\/p>\n<p>Viele Gr\u00fc\u00dfe<br \/>\nRalph<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2690\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-2690\">\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\">13. Dezember 2014 um 10:53<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>CAN braucht eine Gegenstelle sonst bricht das senden einfach ab. Du musst das Oszi auf \u201cSingle-Trigger\u201d stellen um da was zu sehen. Oder mach den ISO1050 nochmal weg und verbinde PB9 und PB8 vom Prozessor, dann werden zwar st\u00e4ndig Telegramme gesendet aber zumindest siehst du was am TX-Pin PB9.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-4448\" class=\"comment odd alt thread-even depth-1\">\n<div id=\"comment-4448\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/b7d2e2bebf5f0c878c5b8416d69a6f35?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Reamon<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">13. Dezember 2015 um 14:45<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<br \/>\nerstmal m\u00f6chte ich die tolle Arbeit loben. Das hat mich beim Verst\u00e4ndnis sehr geholfen.<br \/>\nIch wollte zus\u00e4tzlich den CAN2 nutzen und habe dein Code erweitert.<br \/>\nAber das Problem ist, dass ich \u00fcber CAN2 nur senden kann, aber nicht empfangen.<br \/>\nCAN1 kann ich ganz normal senden und empfangen.<br \/>\nIch habe festgestellt, dass CAN2_RX0_IRQHandler() gar nicht aufgerufen wird wenn eine neue Botschaft \u00fcber CAN2 kommt.<br \/>\nGibt es da ein Trick?<br \/>\nIch w\u00e4re sehr dankbar wenn jemand mir helfen k\u00f6nnte.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4454\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-4454\">\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\">20. Dezember 2015 um 10:58<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>ich habe damals CAN1 und CAN2 getestet (allerdings nicht CAN1+CAN2). Lass mal in der Software die CAN1-Files komplett weg (event. st\u00f6ren die sich) und setze keine Filter ob es dann funktioniert.<br \/>\nHast du verifiziert das die Pegel am RX-Pin der CPU stimmen ?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-4487\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-4487\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/b7d2e2bebf5f0c878c5b8416d69a6f35?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Reamon<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">30. Dezember 2015 um 13:38<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Es lag an der falschen Filterbank. Filterbank 0 bus 13 sind f\u00fcr CAN1 und Filterbank 14 bis 27 sind f\u00fcr CAN2. Deshalb konnte \u00fcber CAN2 nichts empfangen werden, weil eben der Filter nichts durchgelassen hat.<br \/>\nDanke!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4490\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-4490\">\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\">31. Dezember 2015 um 13:01<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>ok, diese Info steht oben im Text, im Sourcecode und im RefManual <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":-)\" \/><br \/>\nund in meinem Quellcode wird eine falsche Filternummer gar nicht zugelassen.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>mit dieser Library kann die CAN-Schnittstelle vom STM32F4 benutzt werden die CAN-Pins die benutzt werden sollen, m\u00fcssen im C-File eingetragen werden (im H-File kann die CAN-Baudrate eingestellt werden) es gibt zwei identische Librarys, getrennt f\u00fcr CAN-1 und CAN-2 die Filter-Funktionen &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/59-can_lolevel-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":59,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[205,9,7],"class_list":["post-448","page","type-page","status-publish","hentry","category-stm32f4","tag-can","tag-library","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/448","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=448"}],"version-history":[{"count":4,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/448\/revisions"}],"predecessor-version":[{"id":1762,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/448\/revisions\/1762"}],"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=448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}