{"id":79,"date":"2017-02-24T22:15:44","date_gmt":"2017-02-24T22:15:44","guid":{"rendered":"http:\/\/marcjuneau.ca\/?p=79"},"modified":"2017-02-25T14:39:51","modified_gmt":"2017-02-25T14:39:51","slug":"smt32-nucleof446re-blink-rapide","status":"publish","type":"post","link":"https:\/\/marcjuneau.ca\/?p=79","title":{"rendered":"SMT32 Nucleo F446RE : Blink rapide"},"content":{"rendered":"<p>Les fonctions qui permettent de contr\u00f4ler les I\/O du STM32 sont pratiques mais, elles sont \u00e9galement tr\u00e8s lentes. Ces fonctions ne se limitent pas \u00e0 imposer le niveau des sorties, elles font aussi quelques v\u00e9rifications.<\/p>\n<p>Il est possible de contr\u00f4ler directement les I\/O du STM32 en\u00a0utilisant directement le port de sortie via le registre de sortie (ODR pour Output Data Register).<\/p>\n<p>Pour obtenir l&rsquo;information sur les diff\u00e9rents registres, il faut consulter le manuel de r\u00e9f\u00e9rence sur le site de ST.<\/p>\n<p>lien :\u00a0<a href=\"http:\/\/www.st.com\/resource\/en\/reference_manual\/dm00135183.pdf\">www.st.com\/resource\/en\/reference_manual\/dm00135183.pdf<\/a><\/p>\n<p>Voici un petit code qui permettra de commuter rapidement une sortie. \u00a0Sur le NUCLEOF446RE, la LED2 est reli\u00e9e \u00e0 PA5. Lors des tests, cette version donnait une p\u00e9riode de 80ns, soit une fr\u00e9quence de 12MHz.<\/p>\n<pre>#include \"stm32f446xx.h\"\r\n\r\n#define LED2_INIT RCC-&gt;AHB1ENR |= RCC_AHB1ENR_GPIOAEN; \\\r\n        GPIOA-&gt;MODER |= GPIO_MODER_MODER5_0\r\n#define LED2_ON (GPIOA-&gt;ODR |= 0x0020)\r\n#define LED2_OFF (GPIOA-&gt;ODR &amp;= ~0x0020)\r\n#define LED2_TOGGLE (GPIOA-&gt;ODR ^= 0x0020)\r\n\r\nint main (void)\r\n{\r\n RCC-&gt;AHB1ENR |= RCC_AHB1ENR_GPIOAEN;\r\n\r\n LED2_INIT;\r\n while (1)\r\n {\r\n   LED2_ON;\r\n   LED2_OFF;\r\n }\r\n}\r\n<\/pre>\n<p>Finalement, il est \u00e9galement possible de faire une m\u00e9thode hybride, et d&rsquo;utiliser les fonctions pour l&rsquo;initialisation et modifier directement les registres pour le contr\u00f4le.<\/p>\n<pre>#include \"stm32f4xx.h\"\r\n#include \"stm32f4xx_hal_gpio.h\"\r\n\r\nGPIO_InitTypeDef GPIO_InitStructure;\r\n#define LED2_ON (GPIOA-&gt;ODR |= 0x0020)\r\n#define LED2_OFF (GPIOA-&gt;ODR &amp;= ~0x0020)\r\n\r\nvoid main(void)\r\n{\r\n   HAL_Init();\r\n   __GPIOA_CLK_ENABLE();\r\n   GPIO_InitStructure.Pin = GPIO_PIN_5;\r\n   GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;\r\n   GPIO_InitStructure.Pull = GPIO_PULLUP;\r\n   GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;\r\n   HAL_GPIO_Init(GPIOA, &amp;GPIO_InitStructure);\r\n\r\n   while (1)\r\n   {\r\n     LED2_ON;\r\n     LED2_OFF;\r\n   }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Les fonctions qui permettent de contr\u00f4ler les I\/O du STM32 sont pratiques mais, elles sont \u00e9galement tr\u00e8s lentes. Ces fonctions ne se limitent pas \u00e0 imposer le niveau des sorties, elles font aussi quelques v\u00e9rifications. Il est possible de contr\u00f4ler directement les I\/O du STM32 en\u00a0utilisant directement le port de<span class=\"more-link\"><a href=\"https:\/\/marcjuneau.ca\/?p=79\">Continue Reading<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,10],"tags":[],"class_list":["entry","author-mjuneau","post-79","post","type-post","status-publish","format-standard","category-cc","category-stm32"],"_links":{"self":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts\/79","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=79"}],"version-history":[{"count":7,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts\/79\/revisions"}],"predecessor-version":[{"id":97,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts\/79\/revisions\/97"}],"wp:attachment":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}