{
    "id": 704,
    "date": "2018-04-22T21:27:39",
    "date_gmt": "2018-04-22T21:27:39",
    "guid": {
        "rendered": "http:\/\/hayperek.pl\/?p=704"
    },
    "modified": "2018-04-22T21:27:39",
    "modified_gmt": "2018-04-22T21:27:39",
    "slug": "walka-o-przykrotka-kolderke-czyli-alokowanie-zasobow-sprzetowych-procesora",
    "status": "publish",
    "type": "post",
    "link": "https:\/\/hayperek.pl\/pl_pl\/2018\/04\/22\/walka-o-przykrotka-kolderke-czyli-alokowanie-zasobow-sprzetowych-procesora\/",
    "title": {
        "rendered": "Walka o przykr\u00f3tk\u0105 ko\u0142derk\u0119 &#8211; czyli alokowanie zasob\u00f3w sprz\u0119towych procesora."
    },
    "content": {
        "rendered": "<p>W przeciwie\u0144stwie do klasycznych komputer\u00f3w, systemy wbudowane zawsze posiadaj\u0105 mocno ograniczon\u0105 pul\u0119 zasob\u00f3w. I nie chodzi tu jedynie o czas CPU czy dost\u0119pn\u0105 pami\u0119\u0107. Nale\u017cy pami\u0119ta\u0107, i\u017c typowy mikrokontroler ma ca\u0142\u0105 gam\u0119 wszelakich peryferi\u00f3w&#8230; Ich liczba oraz mo\u017cliwo\u015bci r\u00f3wnie\u017c stanowi\u0105 istotn\u0105 kwesti\u0119 dla developer\u00f3w. W dzisiejszym artykule spr\u00f3bujemy zastanowi\u0107 si\u0119 nad podzia\u0142em dost\u0119pnych peryferi\u00f3w dla poszczeg\u00f3lnych interfejs\u00f3w i funkcjonalno\u015bci.<\/p>\n<h5>Diagnostyka<\/h5>\n<p>Zaczynamy od diagnostyki, kt\u00f3ra stanowi podstawowe \u017ar\u00f3d\u0142o informacji. Jak wspomina\u0142em w <a href=\"http:\/\/hayperek.pl\/pl_pl\/2018\/04\/03\/diagnostyka-obd-cz-1\/\">artyku\u0142ach<\/a> na jej temat, do jej obs\u0142ugi b\u0119dzie nam potrzebny jeden interfejs UART lub USART pracuj\u0105cy w trybie asynchronicznym. <\/p>\n<h5>CAN<\/h5>\n<p>Magistrala CAN jest drugim co do wa\u017cno\u015bci \u017ar\u00f3d\u0142em danych. Poniewa\u017c w pojazdach, kt\u00f3re nas interesuj\u0105 mog\u0105 istnie\u0107 a\u017c dwie, odr\u0119bne sieci CAN, b\u0119dziemy potrzebowali obu dost\u0119pnych w procesorze STM32F407 kontroler\u00f3w CAN.<\/p>\n<h5>Wy\u015bwietlacz<\/h5>\n<p>W obecnej konfiguracji wy\u015bwietlacz korzysta z interfejsu bazuj\u0105cego na zwyk\u0142ych pinach I\/O <em>(GPIO)<\/em>. W przysz\u0142o\u015bci jednak nale\u017cy przewidywa\u0107 przej\u015bcie na rozwi\u0105zanie oparte o dedykowany kontroler pami\u0119ci FSMC lub magistral\u0119 SPI &#8211; oba peryferia musz\u0105 zosta\u0107 wzi\u0119te pod uwag\u0119 przy parcelowaniu zasob\u00f3w.<\/p>\n<h5>Karta pami\u0119ci SD<\/h5>\n<p>Tu akurat sytuacja jest prosta &#8211; nasz mikrokontroler posiada specjalizowany interfejs SDIO do obs\u0142ugi kart pami\u0119ci. Musimy wi\u0119c za\u0142o\u017cy\u0107, i\u017c zostanie u\u017cyty.<\/p>\n<h5>Czujniki zewn\u0119trzne<\/h5>\n<p>Przewiduj\u0105c rozbudow\u0119 systemu, nale\u017cy zarezerwowa\u0107 pojedynczy interfejs szeregowy SPI lub I2C w celu ewentualnego pod\u0142\u0105czenia dodatkowych czujnik\u00f3w czy innych uk\u0142ad\u00f3w peryferyjnych. <\/p>\n<h5>Pozosta\u0142e<\/h5>\n<ul>\n<li>3x GPIO do obs\u0142ugi manetki,<\/li>\n<li>1x PWM dla pod\u015bwietlenia wy\u015bwietlacza,<\/li>\n<li>2x zewn\u0119trzne przerwanie do obs\u0142ugi czujnik\u00f3w: pr\u0119dko\u015bci oraz oleju,<\/li>\n<li>1x ADC dla czujnika temperatury,<\/li>\n<li>1x UART\/USART jako terminal do debugowania,<\/li>\n<\/ul>\n<h5>Podsumowanie<\/h5>\n<p>Prz przeczytaniu powy\u017cszej listy, kto\u015b mo\u017ce zapyta\u0107:<\/p>\n<blockquote><p>Po co ca\u0142a ta rozpiska? Przecie\u017c procesor ma pod dostatkiem wszystkich peryferi\u00f3w &#8211; wykorzystujemy raptem u\u0142amek jego mo\u017cliwo\u015bci.<\/p><\/blockquote>\n<p>Racja &#8211; u\u017cyjemy zaledwie cz\u0119\u015bci dost\u0119pnych interfejs\u00f3w, ale wci\u0105\u017c pami\u0119tajmy, i\u017c cz\u0119\u015b\u0107 fizycznych wyprowadze\u0144 mikrokontrolera jest wsp\u00f3\u0142dzielona przez kilka-kilkana\u015bcie r\u00f3\u017cnych peryferi\u00f3w. Nierzadko decyduj\u0105c si\u0119 na u\u017cycie jednego z nich, wy\u0142\u0105czamy mo\u017cliwo\u015b\u0107 u\u017cycia innego. Dodatkowo &#8211; routowanie p\u0142ytki PCB <em>(prowadzenie \u015bcie\u017cek)<\/em> jest o wiele \u0142atwiejsze, je\u015bli wiemy jak du\u017cy mamy stopie\u0144 swobody w &#8222;przepinaniu&#8221; si\u0119 mi\u0119dzy poszczeg\u00f3lnymi pinami i peryferiami. <\/p>",
        "protected": false
    },
    "excerpt": {
        "rendered": "<p>W przeciwie\u0144stwie do klasycznych komputer\u00f3w, systemy wbudowane zawsze posiadaj\u0105 mocno ograniczon\u0105 pul\u0119 zasob\u00f3w. I nie chodzi tu jedynie o czas CPU czy dost\u0119pn\u0105 pami\u0119\u0107. Nale\u017cy pami\u0119ta\u0107, i\u017c typowy mikrokontroler ma ca\u0142\u0105 gam\u0119 wszelakich peryferi\u00f3w&#8230; Ich liczba oraz mo\u017cliwo\u015bci r\u00f3wnie\u017c stanowi\u0105 istotn\u0105 kwesti\u0119 dla developer\u00f3w. W dzisiejszym artykule spr\u00f3bujemy zastanowi\u0107 si\u0119 nad podzia\u0142em dost\u0119pnych peryferi\u00f3w dla [&hellip;]<\/p>",
        "protected": false
    },
    "author": 1,
    "featured_media": 735,
    "comment_status": "closed",
    "ping_status": "open",
    "sticky": false,
    "template": "",
    "format": "standard",
    "meta": {
        "footnotes": ""
    },
    "categories": [
        3
    ],
    "tags": [],
    "class_list": {
        "0": "post-704",
        "1": "post",
        "2": "type-post",
        "3": "status-publish",
        "4": "format-standard",
        "5": "has-post-thumbnail",
        "6": "hentry",
        "7": "category-stodni",
        "9": "post-with-thumbnail",
        "10": "post-with-thumbnail-large"
    },
    "_links": {
        "self": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/704",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts"
            }
        ],
        "about": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/types\/post"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/comments?post=704"
            }
        ],
        "version-history": [
            {
                "count": 4,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/704\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 726,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/704\/revisions\/726"
            }
        ],
        "wp:featuredmedia": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media\/735"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media?parent=704"
            }
        ],
        "wp:term": [
            {
                "taxonomy": "category",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/categories?post=704"
            },
            {
                "taxonomy": "post_tag",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/tags?post=704"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}