{"id":334,"date":"2022-07-17T09:27:13","date_gmt":"2022-07-17T08:27:13","guid":{"rendered":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/?p=334"},"modified":"2022-07-17T20:30:45","modified_gmt":"2022-07-17T19:30:45","slug":"334","status":"publish","type":"post","link":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/?p=334","title":{"rendered":"Mise en \u0153uvre de l\u2019USART avec le DMA"},"content":{"rendered":"<h1>Mise en oeuvre de l'USART avec le DMA<\/h1>\n<h3>objectif de la manip :<\/h3>\n<p>Une chaine de caract\u00e8re est envoy\u00e9e automatiquement par l'USART du microcontr\u00f4leur. L'envoi est pilot\u00e9 par le contr\u00f4leur DMA sans intervention du coeur du microcontr\u00f4leur (il d\u00e9clenche seulement l'envoi et c'est le DMA qui g\u00e8re le reste).<\/p>\n<h3>Mat\u00e9riel requis<\/h3>\n<ul>\n<li>un ordinateur avec un terminal (putty, termite,...)<\/li>\n<li>une carte nucleo-L073RZ ou F446RE ou autre...<\/li>\n<li>un c\u00e2ble USB pour programmer et \u00e9muler la liaison s\u00e9rie.<\/li>\n<\/ul>\n<h3>Configuration de l'USART<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/wp-content\/uploads\/2022\/07\/USART_Config_params.png\" alt=\"\" \/><\/p>\n<p><img decoding=\"async\" src=\"USART_Config_Sans_NVIC_params.png\" alt=\"USART_Config_Sans_NVIC_params.png\" \/><br \/>\nPas oblig\u00e9 d'activer les interruptions USART en mode circular buffer.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/wp-content\/uploads\/2022\/07\/USART_Config_DMA_params.png\" alt=\"\" \/><\/p>\n<p>A noter que si on se met en Mode Circular et Increment Address coch\u00e9 pour Memory, il suffit de faire une seule fois l'appel \u00e0 la fonction HAL_UART_Transmit_DMA(&amp;huart2, testMessage, sizeof(testMessage)) pour que l'envoi se r\u00e9p\u00e8te inlassablement.<\/p>\n<pre><code class=\"language-c\">    \/\/ Appel de ces deux fonctions dans cet ordre la et pas l'inverse sinon cela ne fonctionne pas\n    MX_DMA_Init();\n    MX_USART2_UART_Init();\n  uint8_t testMessage[]=\"Message envoye automatiquement grace au controleur DMA\\r\\n\";\n\n    HAL_UART_Transmit_DMA(&huart2, testMessage, sizeof(testMessage));\n    while(1)\n    {\n        \/\/on ne fait rien\n    }<\/code><\/pre>\n<h4>En mode normal, cela donne :<\/h4>\n<p>Attention, il faut activer les interruptions USART !<br \/>\n<img decoding=\"async\" src=\"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/wp-content\/uploads\/2022\/07\/USART_Config_NVIC_params.png\" alt=\"\" \/><\/p>\n<pre><code class=\"language-c\">while (1)\n{\n    HAL_UART_Transmit_DMA(&huart2, testMessage, sizeof(testMessage));\n    HAL_Delay(1000);\n}<\/code><\/pre>\n<h3>Tests<\/h3>\n<p>Ouvrir un terminal (putty) et le configurer en 115200 bauds, 8 bits, pas de parit\u00e9. 1 bit de stop.<br \/>\nProgrammer la carte.<br \/>\nLe message doit s&#039;afficher toutes les secondes \u00e0 l&#039;\u00e9cran du terminal.<\/p>\n<h3>Probl\u00e8mes fr\u00e9quents<\/h3>\n<p>La fonction d&#039;initialisation du DMA MX_DMA_Init() est appel\u00e9e avant celle de l&#039;USART MX_USART_init();<br \/>\nEt c&#039;est le drame. Rien ne fonctionne. Bienvenue en STM32zarbie.<\/p>\n<pre><code class=\"language-c\">  MX_GPIO_Init();\n  MX_USART2_UART_Init();\n  MX_DMA_Init();<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Mise en oeuvre de l&rsquo;USART avec le DMA objectif de la manip : Une chaine de caract\u00e8re est envoy\u00e9e automatiquement par l&rsquo;USART du microcontr\u00f4leur. L&rsquo;envoi est pilot\u00e9 par le contr\u00f4leur DMA sans intervention du coeur du microcontr\u00f4leur (il d\u00e9clenche seulement l&rsquo;envoi et c&rsquo;est le DMA qui g\u00e8re le reste). Mat\u00e9riel requis un ordinateur avec un &hellip; <a href=\"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/?p=334\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Mise en \u0153uvre de l\u2019USART avec le DMA<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[12,9,6,10,11],"class_list":["post-334","post","type-post","status-publish","format-standard","hentry","category-stm32","tag-dma","tag-microcontroleur","tag-stm32","tag-stm32cubeide","tag-usart"],"_links":{"self":[{"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=\/wp\/v2\/posts\/334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=334"}],"version-history":[{"count":2,"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":337,"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=\/wp\/v2\/posts\/334\/revisions\/337"}],"wp:attachment":[{"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.spacelabcachan.universite-paris-saclay.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}