{"id":450,"date":"2017-11-24T23:34:02","date_gmt":"2017-11-24T22:34:02","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=450"},"modified":"2017-12-31T01:22:53","modified_gmt":"2017-12-31T00:22:53","slug":"60-can_mcp25050-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=450","title":{"rendered":"60-CAN_MCP25050-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=448\" title=\"59-CAN_LoLevel-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 59-CAN_LoLevel-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=454\" title=\"61-LCD_Nokia5110-Library (STM32F4)\">61-LCD_Nokia5110-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>mit dieser Library kann der 8-Kanal CAN-Portexpander von Microchip (MCP25050) am STM32F4 \u00fcber den CAN-Bus betrieben werden.<\/p>\n<p>Den MCP25050 gibt es bei Reichelt zu kaufen (ca. 3 EUR) , allerdings muss dieser einmalig mit einem HEX-File programmiert werden (das ist im Projekt dabei). Dazu ist ein passendes Programierger\u00e4t (z.B. Galep-5) notwendig. (gegen einen Unkostenbeitrag kann ich das programmieren \u00fcbernehmen)<\/p>\n<p>Die 8 GPIO-Pins k\u00f6nnen in verschiedenen Modes betrieben werden :<br \/>\nDigital-In (GP-0 bis GP-7)<br \/>\nDigital-Out (GP-0 bis GP-6)<br \/>\nAnalog-In (GP-0 bis GP-3)<br \/>\nPWM-Out (GP-2 bis GP-3)<\/p>\n<p><strong>Bilder :<\/strong><\/p>\n<div id=\"gallery-1\" class=\"gallery galleryid-2459 gallery-columns-3 gallery-size-thumbnail\">\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"mcp_board\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/mcp_board.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/mcp_board-150x150.jpg\" alt=\"MCP25050\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">MCP25050<\/dd>\n<\/dl>\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"mcp_sch\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/mcp_sch.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/mcp_sch-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=\"mcp_can\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/mcp_can.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/mcp_can-150x150.jpg\" alt=\"CAN-Settings\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">CAN-Settings<\/dd>\n<\/dl>\n<p><br style=\"clear: both;\" \/><\/p>\n<\/div>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO\r\nBenutzte Librarys : STM32_UB_CAN1<\/pre>\n<p><strong>Enumerationen der GPIOs :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  MCP_GP0 = 0, \/\/ Pin1  (GPIO0, AN0)\r\n  MCP_GP1,     \/\/ Pin2  (GPIO1, AN1)\r\n  MCP_GP2,     \/\/ Pin3  (GPIO2, AN2, PWM1)\r\n  MCP_GP3,     \/\/ Pin4  (GPIO3, AN3, PWM2)\r\n  MCP_GP4,     \/\/ Pin5  (GPIO4)\r\n  MCP_GP5,     \/\/ Pin6  (GPIO5)\r\n  MCP_GP6,     \/\/ Pin10 (GPIO6)\r\n  MCP_GP7      \/\/ Pin11 (GPI7) \r\n}MCP_GPIO_t;<\/pre>\n<p><strong>Enumerationen der Modes :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  MCP_GPIO_OUT = 0,  \/\/ Pin als Digital-Ausgang\r\n  MCP_GPIO_IN,       \/\/ Pin als Digital-Eingang\r\n  MCP_PWM_OUT,       \/\/ Pin als PWM-Ausgang\r\n  MCP_ADC_IN         \/\/ Pin als Analog-Eingang\r\n}MCP_PIN_MODE_t;<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">ErrorStatus UB_MCP25050_Init(void);                                       \/\/ zum init vom MCP25050\r\nErrorStatus UB_MCP25050_Check(void);                                      \/\/ zum testen ob der IC am CAN-Bus h\u00e4ngt\r\nvoid UB_MCP25050_PIN_Define(MCP_GPIO_t pin, MCP_PIN_MODE_t mode);         \/\/ um den Mode eines Port-Pin zu definieren\r\nvoid UB_MCP25050_GPIO_Lo(MCP_GPIO_t pin);                                 \/\/ um einen Digital-Pin auf Lo zu setzen\r\nvoid UB_MCP25050_GPIO_Hi(MCP_GPIO_t pin);                                 \/\/ um einen Digital-Pin auf Hi zu setzen\r\nBitAction UB_MCP25050_GPIO_Read(MCP_GPIO_t pin);                          \/\/ um einen Digital-Pin auszulesen\r\nuint16_t UB_MCP25050_ADC_Read(MCP_GPIO_t pin);                            \/\/ um einen ADC-Wert auszulesen\r\nvoid UB_MCP25050_PWM_Enable(MCP_GPIO_t pin, uint8_t pwm_speed);           \/\/ um einen PWM zu aktivieren\r\nvoid UB_MCP25050_PWM_Value(MCP_GPIO_t pin, uint8_t duty_cycle);           \/\/ um den DutyCycle eines PWM einzustellen\r\nvoid UB_MCP25050_writeRegister(uint8_t adr, uint8_t wert, uint8_t maske); \/\/ zum beschreiben eines RAM-Registers<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 21.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 MCP25050 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_mcp25050.h\"\r\n#include \"stm32_ub_led.h\"\r\n\r\nint main(void)\r\n{\r\n  uint32_t mcp_ok=0;\r\n  uint32_t n;\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 MCP25050\r\n  UB_MCP25050_Init();\r\n\r\n  while(1)\r\n  {\r\n    if(mcp_ok==0) {\r\n      UB_Led_On(LED_RED);\r\n      \/\/ MCP25050 am CAN-Bus suchen\r\n      if(UB_MCP25050_Check()==SUCCESS) {\r\n        \/\/ MCP25050 gefunden\r\n        mcp_ok=1;\r\n        \/\/ GPIO0 und GPIO1 als Ausgang definieren\r\n        UB_MCP25050_PIN_Define(MCP_GP0, MCP_GPIO_OUT);\r\n        UB_MCP25050_PIN_Define(MCP_GP1, MCP_GPIO_OUT);\r\n        \/\/ an GPIO0 einen Lo-Pegel ausgeben\r\n        UB_MCP25050_GPIO_Lo(MCP_GP0);\r\n        \/\/ an GPIO1 einen Hi-Pegel ausgeben\r\n        UB_MCP25050_GPIO_Hi(MCP_GP1);\r\n      }\r\n    }\r\n    else {\r\n      \/\/ MCP25050 ist ok\r\n      UB_Led_Off(LED_RED);\r\n      UB_Led_On(LED_GREEN);\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_mcp25050_v100.zip\">ub_stm32f4_can_mcp25050_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\/09\/Demo_60_CAN_MCP25050.zip\">Demo_60_CAN_MCP25050<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>mit dieser Library kann der 8-Kanal CAN-Portexpander von Microchip (MCP25050) am STM32F4 \u00fcber den CAN-Bus betrieben werden. Den MCP25050 gibt es bei Reichelt zu kaufen (ca. 3 EUR) , allerdings muss dieser einmalig mit einem HEX-File programmiert werden (das ist &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=450\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":60,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[205,9,206,7],"class_list":["post-450","page","type-page","status-publish","hentry","category-stm32f4","tag-can","tag-library","tag-mcp25050","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=450"}],"version-history":[{"count":4,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/450\/revisions"}],"predecessor-version":[{"id":1761,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/450\/revisions\/1761"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}