<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Học ARM]]></title><description><![CDATA[while(1) {Share();}]]></description><link>https://hocarm.org/</link><image><url>https://hocarm.org/favicon.png</url><title>Học ARM</title><link>https://hocarm.org/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Sun, 05 Apr 2026 03:53:55 GMT</lastBuildDate><atom:link href="https://hocarm.org/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[STM32CubeIDE UART DMA]]></title><description><![CDATA[Hướng dẫn lập trình STM32 UART dùng STM32CubeIDE, hướng dẫn cấu hình gửi nhận data qua UART với DMA, sinh code với CubeMX]]></description><link>https://hocarm.org/stm32cubeide-uart-dma/</link><guid isPermaLink="false">6134bc50b352f1051b6cf071</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Thu, 09 Sep 2021 13:47:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/uart-dma-feature.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>H&#x1ECD;c c&#xE1;ch c&#x1EA5;u h&#xEC;nh UART v&#x1EDB;i DMA</li><li>H&#x1ECD;c c&#xE1;ch generate Code v&#xE0; s&#x1EED; d&#x1EE5;ng HAL function</li><li>T&#x1EA1;o v&#xED; d&#x1EE5; &#x111;&#x1A1;n gi&#x1EA3;n loopback v&#x1EDB;i DMA</li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>C&#x1EA5;u h&#xEC;nh UART v&#xE0; generate code</li><li>G&#x1EED;i v&#xE0; nh&#x1EAD;n data th&#xF4;ng qua UART v&#x1EDB;i DMA</li><li>X&#xE1;c th&#x1EF1;c l&#x1EA1;i ho&#x1EA1;t &#x111;&#x1ED9;ng</li></ul><h2 id="c-u-h-nh">C&#x1EA5;u h&#xEC;nh</h2><h3 id="t-o-project">T&#x1EA1;o project</h3><ul><li>C&#xE1;ch l&#xE0;m t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i h&#x1B0;&#x1EDB;ng d&#x1EAB;n tr&#x1B0;&#x1EDB;c File &gt; New &gt; STM32 Project</li><li>Ch&#xE2;n PA9, v&#xE0; PA10 m&#x1EB7;c &#x111;&#x1ECB;nh s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c l&#x1EF1;a ch&#x1ECD;n theo v&#x1EDB;i USART1 t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i UART tr&#x1B0;&#x1EDB;c</li></ul><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><ul><li>Set clock v&#x1EDB;i t&#x1EA7;n s&#x1ED1; t&#x1ED1;i &#x111;a, gi&#x1ED1;ng nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c</li></ul><h3 id="c-u-h-nh-uart">C&#x1EA5;u h&#xEC;nh UART</h3><ul><li>C&#xE1;c th&#xF4;ng s&#x1ED1; c&#xF3; th&#x1EC3; c&#x1EA5;u h&#xEC;nh &#x111;&#x1B0;&#x1EE3;c cho UART l&#xE0; BaudRate,World length,Parity,Stop bits,Data direction, Oversampling t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c lu&#xF4;n</li></ul><h3 id="c-u-h-nh-dma">C&#x1EA5;u h&#xEC;nh DMA</h3><ul><li>Ch&#x1ECD;n TAB&gt;DMA Settings sau &#x111;&#xF3; &#x1EA5;n ADD</li><li>USART configuration DMA Tx setting</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-66.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><ul><li>USART configuration DMA Rx setting</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-67.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><h3 id="c-u-h-nh-nvic">C&#x1EA5;u h&#xEC;nh NVIC</h3><img src="https://hocarm.org/content/images/2021/09/uart-dma-feature.png" alt="STM32CubeIDE UART DMA"><p>M&#x1EB7;c &#x111;&#x1ECB;nh s&#x1EBD; t&#x1EF1; set NVIC v&#x1EDB;i Force DMA channel interrupt cho ta nh&#x1B0; h&#xEC;nh</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-68.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><p>Save l&#x1EA1;i &#x111;&#x1EC3; generate code th&#xF4;i.</p><h2 id="workflow">Workflow</h2><p>HAL Library UART v&#x1EDB;i DMA RX flow</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-69.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-70.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-72.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-73.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-74.png" class="kg-image" alt="STM32CubeIDE UART DMA" loading="lazy"></figure><h3 id="code">Code</h3><ul><li>Vi&#x1EBF;t code trong <code>main.c</code> gi&#x1EEF;a /* USER CODE BEGIN 2*/v&#xE0; /* USER CODE END 2*/ </li></ul><p>2 h&#xE0;m &#x111;&#x1B0;&#x1EE3;c d&#xF9;ng cho truy&#x1EC1;n v&#xE0; nh&#x1EAD;n l&#xE0;</p><ul><li><code>HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);</code></li><li><code>HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);</code></li></ul><p>C&#xE1;c b&#x1B0;&#x1EDB;c th&#x1EF1;c hi&#x1EC7;n</p><ul><li>&#x110;&#x1ECB;nh ngh&#x129;a buffer</li><li>G&#x1EED;i v&#xE0; nh&#x1EAD;n data v&#x1EDB;i DMA</li><li>Ki&#x1EC3;m tra callback ho&#xE0;n th&#xE0;nh b&#x1EB1;ng c&#xE1;ch &#x111;&#x1EB7;t breakpoint v&#xE0;o NOP &#x111;&#x1EC3; xem n&#x1EBF;u ch&#xFA;ng ta nh&#x1EAD;n xong buffer.</li></ul><pre><code class="language-C">/* USER CODE BEGIN 0 */
uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9};
uint8_t rx_buff[10];
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
  HAL_UART_Receive_DMA(&amp;huart1,rx_buff,10);
  HAL_UART_Transmit_DMA(&amp;huart1,tx_buff,10);
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	__NOP();//check if we receive all data
}
/* USER CODE END 4 */</code></pre><p>Source code tham kh&#x1EA3;o b&#x1EA1;n c&#xF3; th&#x1EC3; xem t&#x1EA1;i &#x111;&#xE2;y</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeIDE UART DMA"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeIDE UART DMA"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[STM32CubeIDE UART Interrupt]]></title><description><![CDATA[Hướng dẫn lập trình STM32 UART dùng STM32CubeIDE, hướng dẫn cấu hình gửi nhận data qua UART với interrupt, sinh code với CubeMX]]></description><link>https://hocarm.org/stm32cubeide-uart-interrupt/</link><guid isPermaLink="false">6134930fb352f1051b6cefea</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Wed, 08 Sep 2021 10:48:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/uart-int-feature.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>H&#x1ECD;c c&#xE1;ch setup UART v&#x1EDB;i interrupt trong CubeIDE</li><li>Sinh code v&#xE0; s&#x1EED; d&#x1EE5;ng HAL function</li><li>T&#x1EA1;o loopback v&#x1EDB;i interrupt</li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>C&#x1EA5;u h&#xEC;nh UART v&#xE0; sinh code</li><li>Truy&#x1EC1;n nh&#x1EAD;n data qua UART v&#x1EDB;i interrupt</li><li>Ki&#x1EC3;m tra l&#x1EA1;i k&#x1EBF;t qu&#x1EA3; c&#x1EE7;a t&#x1EEB;ng function</li></ul><h2 id="c-u-h-nh">C&#x1EA5;u h&#xEC;nh</h2><h3 id="t-o-project">T&#x1EA1;o project</h3><ul><li>C&#xE1;ch l&#xE0;m t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i h&#x1B0;&#x1EDB;ng d&#x1EAB;n tr&#x1B0;&#x1EDB;c File &gt; New &gt; STM32 Project</li><li>Ch&#xE2;n PA9, v&#xE0; PA10 m&#x1EB7;c &#x111;&#x1ECB;nh s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c l&#x1EF1;a ch&#x1ECD;n theo v&#x1EDB;i USART1 t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i UART tr&#x1B0;&#x1EDB;c</li></ul><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><ul><li>Set clock v&#x1EDB;i t&#x1EA7;n s&#x1ED1; t&#x1ED1;i &#x111;a, gi&#x1ED1;ng nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c</li></ul><h3 id="c-u-h-nh-uart">C&#x1EA5;u h&#xEC;nh UART</h3><ul><li>C&#xE1;c th&#xF4;ng s&#x1ED1; c&#xF3; th&#x1EC3; c&#x1EA5;u h&#xEC;nh &#x111;&#x1B0;&#x1EE3;c cho UART l&#xE0; BaudRate,World length,Parity,Stop bits,Data direction, Oversampling t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c lu&#xF4;n</li></ul><h3 id="c-u-h-nh-nvic">C&#x1EA5;u h&#xEC;nh NVIC</h3><ul><li>Ch&#x1ECD;n NVIC &gt; NVIC &gt; enable USART1 global interrupt</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-58.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><img src="https://hocarm.org/content/images/2021/09/uart-int-feature.png" alt="STM32CubeIDE UART Interrupt"><p>Sau &#x111;&#xF3; generate code b&#x1EB1;ng c&#xE1;ch save l&#x1EA1;i</p><h2 id="workflow">Workflow</h2><h3 id="hal-library-uart-v-i-it-receive-flow">HAL Library UART v&#x1EDB;i IT receive flow</h3><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-59.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><h3 id="hal-library-uart-v-i-it-transmit-flow">HAL Library UART v&#x1EDB;i IT transmit flow</h3><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-60.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-61.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-62.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-63.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-64.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-65.png" class="kg-image" alt="STM32CubeIDE UART Interrupt" loading="lazy"></figure><h3 id="code">Code</h3><ul><li>Vi&#x1EBF;t code trong <code>main.c</code> gi&#x1EEF;a /* USER CODE BEGIN 2*/v&#xE0; /* USER CODE END 2*/ </li></ul><p>2 h&#xE0;m &#x111;&#x1B0;&#x1EE3;c d&#xF9;ng cho truy&#x1EC1;n v&#xE0; nh&#x1EAD;n l&#xE0;</p><ul><li><code>HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);</code></li><li><code>HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)</code></li></ul><p>C&#xE1;c b&#x1B0;&#x1EDB;c th&#x1EF1;c hi&#x1EC7;n</p><ul><li>&#x110;&#x1ECB;nh ngh&#x129;a buffer</li><li>G&#x1EED;i v&#xE0; nh&#x1EAD;n data</li><li>Ki&#x1EC3;m tra callback ho&#xE0;n th&#xE0;nh</li></ul><pre><code class="language-C">/* USER CODE BEGIN 0 */
uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9};
uint8_t rx_buff[10];
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&amp;huart1, rx_buff, 10);
  HAL_UART_Transmit_IT(&amp;huart1, tx_buff, 10);
/* USER CODE END 2 */

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  __NOP();//test if we reach this position
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
  __NOP();//test if we reach this position
}
/* USER CODE END 4 */
</code></pre><p>Ch&#x1B0;&#x1A1;ng tr&#xEC;nh tham kh&#x1EA3;o</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeIDE UART Interrupt"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeIDE UART Interrupt"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[STM32CubeIDE UART]]></title><description><![CDATA[Hướng dẫn lập trình STM32 UART dùng STM32CubeIDE, hướng dẫn cấu hình gửi nhận data qua UART không dùng interrupt, sinh code với CubeMX]]></description><link>https://hocarm.org/stm32cubeide-uart/</link><guid isPermaLink="false">61345667b352f1051b6cef34</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Tue, 07 Sep 2021 09:43:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/uart-feature.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>H&#x1ECD;c c&#xE1;ch c&#x1EA5;u h&#xEC;nh UART</li><li>H&#x1ECD;c c&#xE1;ch sinh code v&#xE0; s&#x1EED; d&#x1EE5;ng HAL function</li><li>Truy&#x1EC1;n nh&#x1EAD;n data qua uart</li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>C&#x1EA5;u h&#xEC;nh UART v&#xE0; sinh code</li><li>Truy&#x1EC1;n nh&#x1EAD;n data th&#xF4;ng qua UART kh&#xF4;ng d&#xF9;ng interrupt</li><li>X&#xE1;c th&#x1EF1;c l&#x1EA1;i ho&#x1EA1;t &#x111;&#x1ED9;ng</li></ul><h2 id="c-u-h-nh">C&#x1EA5;u h&#xEC;nh</h2><h3 id="t-o-project">T&#x1EA1;o project</h3><ul><li>C&#xE1;ch l&#xE0;m t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i h&#x1B0;&#x1EDB;ng d&#x1EAB;n tr&#x1B0;&#x1EDB;c File &gt; New &gt; STM32 Project</li><li>Ch&#xFA;ng ta c&#x1EA7;n t&#xEC;m m&#x1ED9;t s&#x1ED1; ch&#xE2;n kh&#xF4;ng d&#xF9;ng &#x111;&#x1EC3; t&#x1EA1;o ra k&#x1EBF;t n&#x1ED1;i loopback</li><li>Ch&#x1ECD;n USART1 l&#xE0; asynchronous mode</li><li>Ch&#xE2;n PA9, v&#xE0; PA10 m&#x1EB7;c &#x111;&#x1ECB;nh s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c l&#x1EF1;a ch&#x1ECD;n theo v&#x1EDB;i USART1</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-45.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><ul><li>Set clock v&#x1EDB;i t&#x1EA7;n s&#x1ED1; t&#x1ED1;i &#x111;a, gi&#x1ED1;ng nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c</li></ul><h3 id="c-u-h-nh-uart">C&#x1EA5;u h&#xEC;nh UART</h3><ul><li>C&#xE1;c th&#xF4;ng s&#x1ED1; c&#xF3; th&#x1EC3; c&#x1EA5;u h&#xEC;nh &#x111;&#x1B0;&#x1EE3;c cho UART l&#xE0; BaudRate,World length,Parity,Stop bits,Data direction, Oversampling</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-46.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><img src="https://hocarm.org/content/images/2021/09/uart-feature.png" alt="STM32CubeIDE UART"><p>Quan s&#xE1;t &#x1EDF; GPIO th&#x1EBB; UART b&#x1EA1;n c&#xF3; th&#x1EC3; th&#x1EA5;y Maximum output &#x111;&#x1B0;&#x1EE3;c set l&#xEA;n l&#xE0; Very High</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-47.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><p>Xong ph&#x1EA7;n c&#x1EA5;u h&#xEC;nh, gi&#x1EDD; sinh code th&#xF4;i</p><h2 id="workflow">Workflow</h2><h3 id="hal-library-flow-init">HAL Library flow init</h3><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-48.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-49.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-51.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-52.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-53.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-54.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-55.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><h3 id="hal-library-transmit-flow">HAL Library transmit flow</h3><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-56.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><h3 id="hal-library-receive-flow">HAL Library receive flow</h3><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-57.png" class="kg-image" alt="STM32CubeIDE UART" loading="lazy"></figure><h3 id="code">Code</h3><ul><li>Vi&#x1EBF;t code trong <code>main.c</code> gi&#x1EEF;a /* USER CODE BEGIN 3*/v&#xE0; /* USER CODE END 3*/ v&#xE0; cod trong while function</li></ul><p>2 h&#xE0;m &#x111;&#x1B0;&#x1EE3;c d&#xF9;ng cho truy&#x1EC1;n v&#xE0; nh&#x1EAD;n l&#xE0;</p><ul><li><code>HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)</code></li><li><code>HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)</code></li></ul><p>Truy&#x1EC1;n data</p><ul><li>T&#x1EA1;o data structure cho data</li><li>G&#x1ECD;i transmit function t&#x1EEB; while loop</li></ul><pre><code class="language-C">/* USER CODE BEGIN 0 */
uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9};
/* USER CODE END 0 */
/* USER CODE BEGIN 3 */
  while (1)
  {
	  HAL_UART_Transmit(&amp;huart1,data,10,1000);
  }
 /* USER CODE END 3 */</code></pre><p>Nh&#x1EAD;n data</p><ul><li>T&#x1EA1;o data structure cho data</li><li>G&#x1ECD;i transmit function t&#x1EEB; while loop</li></ul><pre><code class="language-C">/* USER CODE BEGIN 0 */
uint8_t data[10];
/* USER CODE END 0 */
//..
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	HAL_UART_Receive(&amp;huart1,data,10,1000);
  }
  /* USER CODE END 3 */</code></pre><p>Ch&#x1B0;&#x1A1;ng tr&#xEC;nh tham kh&#x1EA3;o</p><p><a href="https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4">https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4</a><br></p>]]></content:encoded></item><item><title><![CDATA[STM32CubeIDE RTC]]></title><description><![CDATA[Hướng dẫn lập trình STM32 RTC Interrupt dùng STM32CubeIDE, hướng dẫn cấu hình RTC dùng interrupt, tạo RTC đơn giản với periodic alarm interrupt]]></description><link>https://hocarm.org/stm32cubeide-rtc/</link><guid isPermaLink="false">6134446bb352f1051b6ceeac</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Mon, 06 Sep 2021 05:22:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/rtc-feature.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>C&#x1EA5;u h&#xEC;nh RTC v&#x1EDB;i interrupt trong CubeMX</li><li>T&#x1EA1;o RTC project &#x111;&#x1A1;n gi&#x1EA3;n v&#x1EDB;i b&#xE1;o th&#x1EE9;c theo th&#x1EDD;i gian &#x111;&#x1ECB;nh s&#x1EB5;n</li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>S&#x1EED; d&#x1EE5;ng CubeIDE &#x111;&#x1EC3; sinh code RTC</li><li>C&#x1EA5;u h&#xEC;nh RTC v&#x1EDB;i HAL</li><li>Ki&#x1EC3;m tra l&#x1EA1;i c&#xE1;c ch&#x1EE9;c n&#x103;ng c&#x1EE7;a RTC alarm interrupt</li></ul><h2 id="c-u-h-nh">C&#x1EA5;u h&#xEC;nh</h2><h3 id="t-o-project">T&#x1EA1;o project</h3><ul><li>C&#xE1;ch l&#xE0;m t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i h&#x1B0;&#x1EDB;ng d&#x1EAB;n tr&#x1B0;&#x1EDB;c File &gt; New &gt; STM32 Project</li><li>Set Internal Alarm tr&#xEA;n Alarm A ho&#x1EB7;c Alarm B</li><li>Set GPIO ch&#x1EDB;p LED nh&#x1B0; l&#xE0; t&#xED;n hi&#x1EC7;u th&#xF4;ng b&#xE1;o alarm</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-42.png" class="kg-image" alt="STM32CubeIDE RTC" loading="lazy"></figure><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><ul><li>Set clock v&#x1EDB;i t&#x1EA7;n s&#x1ED1; t&#x1ED1;i &#x111;a, gi&#x1ED1;ng nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-43.png" class="kg-image" alt="STM32CubeIDE RTC" loading="lazy"></figure><h3 id="c-u-h-nh-rtc">C&#x1EA5;u h&#xEC;nh RTC</h3><ul><li> RTC &gt; Configuration &gt; Parameter Setting, nh&#x1EAD;p th&#xF4;ng s&#x1ED1; t&#xF9;y v&#xE0;o &#xFD; th&#xED;ch c&#x1EE7;a b&#x1EA1;n</li><li>RTC &gt; Configuration &gt; NVIC Setting &gt; Enable RTC alarm A and B interrupt</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-44.png" class="kg-image" alt="STM32CubeIDE RTC" loading="lazy"></figure><img src="https://hocarm.org/content/images/2021/09/rtc-feature.png" alt="STM32CubeIDE RTC"><p>Save l&#x1EA1;i v&#xE0; auto generate code th&#xF4;i</p><h2 id="workflow">Workflow</h2><p>RTC c&#xF3; th&#x1EC3; &#x111;&#x1B0;&#x1EE3;c gi&#x1EEF; nguy&#xEA;n trong qu&#xE1; tr&#xEC;nh RESET (ch&#x1EBF; &#x111;&#x1ED9; LP ok)</p><ul><li>M&#x1EB7;c &#x111;&#x1ECB;nh RTC kh&#xF4;ng &#x111;&#x1B0;&#x1EE3;c enable</li><li>Ta c&#x1EA7;n th&#xEA;m <code>HAL_PWR_EnableBkUpAccess()</code> v&#xE0; <code>__HAL_RCC_RTC_ENABLE()</code> before we tr&#x1B0;&#x1EDB;c khi init <code>MX_RTC_Init()</code></li></ul><p>C&#x1EA5;u h&#xEC;nh alarm &#x111;&#x1EA7;u ti&#xEA;n l&#xE0; 1s trong <code>MX_RTC_Init</code></p><p>T&#x1EA1;o RTC interrupt handler v&#xE0; we c&#x1EA5;u h&#xEC;nh l&#x1EA1;i Alarm A time v&#x1EDB;i c&#xE1;c h&#xE0;m sau</p><ul><li><code>HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef <em>hrtc)</em></code></li><li><code><em>HAL_RTC_GetAlarm(RTC_HandleTypeDef </em>hrtc, RTC_AlarmTypeDef<em>sAlarm, uint32_t Alarm, uint32_t Format)</em></code></li><li><code><em>HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef </em>hrtc, RTC_AlarmTypeDef*sAlarm, uint32_t Format)</code></li></ul><p>RTC alarm th&#xF4;ng b&#xE1;o th&#xE0;nh c&#xF4;ng b&#x1EDF;i LED</p><ul><li><code>HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)</code></li></ul><pre><code class="language-C">  /* USER CODE BEGIN SysInit */
  HAL_PWR_EnableBkUpAccess();//enable PWR backup domain access (RTC,BKReg)
  __HAL_RCC_RTC_ENABLE();//Enable RTC. not created by cube because the RTC can run.
  /* USER CODE END SysInit */
  /* USER CODE BEGIN 4 */
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
  RTC_AlarmTypeDef sAlarm;
  HAL_RTC_GetAlarm(hrtc, &amp;sAlarm, RTC_ALARM_A, FORMAT_BIN);
  if (sAlarm.AlarmTime.Seconds &gt; 58)
  {
    sAlarm.AlarmTime.Seconds = 0;
  }
  else
  {
    sAlarm.AlarmTime.Seconds = sAlarm.AlarmTime.Seconds + 1;
  }
  while (HAL_RTC_SetAlarm_IT(hrtc, &amp;sAlarm, FORMAT_BIN) != HAL_OK)
  {
  }
  HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);
}
/* USER CODE END 4 */</code></pre><p>Ch&#x1B0;&#x1A1;ng tr&#xEC;nh b&#x1EA1;n c&#xF3; th&#x1EC3; tham kh&#x1EA3;o t&#x1EA1;i</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeIDE RTC"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeIDE RTC"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[STM32CubeIDE DMA Interrupt]]></title><description><![CDATA[Hướng dẫn lập trình STM32 DMA Interrupt dùng STM32CubeIDE, hướng dẫn cấu hình transfer data từ memory sang memory, RAM sang RAM dùng interrupt]]></description><link>https://hocarm.org/stm32cubeide-dma-interrupt/</link><guid isPermaLink="false">61343054b352f1051b6cee04</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Sun, 05 Sep 2021 04:12:12 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/dma-ext-feature.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>H&#x1ECD;c c&#xE1;ch c&#x1EA5;u h&#xEC;nh DMA transfer v&#x1EDB;i interrupt trong CubeMX</li><li>T&#x1EA1;o transfer DMA memory n&#xE0;y sang memory kh&#xE1;c, t&#x1EEB; RAM sang RAM </li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>Sinh code v&#x1EDB;i DMA</li><li>H&#x1ECD;c c&#xE1;ch c&#x1EA5;u h&#xEC;nh DMA trong HAL</li><li>X&#xE1;c th&#x1EF1;c l&#x1EA1;i &#x111;&#x1ED9; ch&#xED;nh x&#xE1;c c&#x1EE7;a c&#xE1;c ch&#x1EE9;ng n&#x103;ng b&#x1EB1;ng c&#xE1;ch so s&#xE1;nh c&#xE1;c buffer transfer</li></ul><h2 id="c-u-h-nh">C&#x1EA5;u h&#xEC;nh</h2><h3 id="t-o-project">T&#x1EA1;o project</h3><ul><li>C&#xE1;ch l&#xE0;m t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i h&#x1B0;&#x1EDB;ng d&#x1EAB;n tr&#x1B0;&#x1EDB;c File &gt; New &gt; STM32 Project</li><li>V&#x1EDB;i DMA th&#xEC; ch&#xFA;ng ta kh&#xF4;ng c&#x1EA7;n c&#x1EA5;u h&#xEC;nh b&#x1EA5;t k&#x1EF3; ch&#xE2;n n&#xE0;o</li></ul><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><ul><li>Set clock v&#x1EDB;i t&#x1EA7;n s&#x1ED1; t&#x1ED1;i &#x111;a, gi&#x1ED1;ng nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-35.png" class="kg-image" alt="STM32CubeIDE DMA Interrupt" loading="lazy"></figure><h3 id="c-u-h-nh-dma">C&#x1EA5;u h&#xEC;nh DMA</h3><img src="https://hocarm.org/content/images/2021/09/dma-ext-feature.png" alt="STM32CubeIDE DMA Interrupt"><p>C&#x1EA5;u h&#xEC;nh t&#x1B0;&#x1A1;ng t&#x1EF1; b&#xE0;i DMA M2M tr&#x1B0;&#x1EDB;c</p><ul><li>Th&#x1EBB; Pinout &amp; Configuration &gt; DMA &gt; DMA2 &gt; Add</li><li>Ch&#x1ECD;n MEMTOMEM DMA request</li><li>Normal mode, Increment Address source memory v&#xE0; destination memory</li><li>D&#xF9;ng FIFO</li><li>Byte data width</li><li>Burst size l&#xE0; single</li></ul><p>Th&#xEA;m c&#x1EA5;u h&#xEC;nh interrupt trong</p><ul><li>NVIC </li><li>Enable DMA2 Stream interrupt</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-36.png" class="kg-image" alt="STM32CubeIDE DMA Interrupt" loading="lazy"></figure><p>Xong c&#xE1;c b&#x1B0;&#x1EDB;c c&#x1EA5;u h&#xEC;nh, gi&#x1EDD; th&#xEC; generate code b&#x1EB1;ng c&#xE1;ch save l&#x1EA1;i th&#xF4;i</p><h2 id="workflow">Workflow</h2><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-37.png" class="kg-image" alt="STM32CubeIDE DMA Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-38.png" class="kg-image" alt="STM32CubeIDE DMA Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-39.png" class="kg-image" alt="STM32CubeIDE DMA Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-40.png" class="kg-image" alt="STM32CubeIDE DMA Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-41.png" class="kg-image" alt="STM32CubeIDE DMA Interrupt" loading="lazy"></figure><h3 id="code">Code</h3><p>Gi&#x1EDD; th&#xEC; code, m&#x1EDF; file <code>main.c</code> l&#xEA;n qu&#x1EA5;t th&#xF4;i</p><ul><li>Code s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c vi&#x1EBF;t v&#xE0;o trong &#x111;o&#x1EA1;n /* USER CODE BEGIN 2 <em>/v&#xE0; /</em> USER CODE END 2 */</li><li>C&#x1EA7;n th&#xEA;m t&#xEA;n c&#x1EE7;a DMA callback function v&#xE0;o DMA structure</li><li>H&#xE0;m HAL cho DMA &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng <code>HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)</code></li><li>T&#x1EA1;o 2 buffer ch&#x1EE9;a data g&#x1EED;i v&#xE0; data nh&#x1EAD;n</li><li>Tr&#x1B0;&#x1EDB;c khi start DMA &#xA0;v&#x1EDB;i interrupt ta c&#x1EA7;n set callback v&#xE0;o DMA structure, sau &#x111;&#xF3; th&#xEC; d&#xF9;ng HAL_DMA_Start_IT &#x111;&#x1EC3; b&#x1EAF;t &#x111;&#x1EA7;u transfer DMA</li></ul><pre><code class="language-C">/* USER CODE BEGIN 0 */
//two buffers One with source data, Second as destination buffer
uint8_t Buffer_Src[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
uint8_t Buffer_Dest[10];
//DMA callback creation function prototype
void XferCpltCallback(DMA_HandleTypeDef *hdma);
/* USER CODE END 0 */

/* USER CODE BEGIN 2 */
//DMA Start
  hdma_memtomem_dma2_stream0.XferCpltCallback = &amp;XferCpltCallback;
  HAL_DMA_Start_IT(&amp;hdma_memtomem_dma2_stream0, (uint32_t)Buffer_Src, (uint32_t)Buffer_Dest, 10);
/* USER CODE END 2 */

/* USER CODE BEGIN 4 */
//DMA complete callback with nop where we can put breakpoint
void XferCpltCallback(DMA_HandleTypeDef *hdma)
{
  __NOP(); //we reach this only if DMA transfer was correct
}
/* USER CODE END 4 */</code></pre><p>Ch&#x1B0;&#x1A1;ng tr&#xEC;nh tham kh&#x1EA3;o</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - hocarm/STM32F4-Discovery-Tutorial: C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeIDE DMA Interrupt"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeIDE DMA Interrupt"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[STM32CubeIDE DMA M2M]]></title><description><![CDATA[Hướng dẫn lập trình STM32 DMA M2M dùng STM32CubeIDE, hướng dẫn cấu hình transfer data từ memory sang memory, RAM sang RAM]]></description><link>https://hocarm.org/stm32cubeide-dma-m2m/</link><guid isPermaLink="false">61338647b352f1051b6ced60</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Sat, 04 Sep 2021 16:07:02 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/dma-m2m-feature.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>H&#x1ECD;c c&#xE1;ch c&#x1EA5;u h&#xEC;nh DMA transfer v&#x1EDB;i CubeIDE</li><li>T&#x1EA1;o transfer truy&#x1EC1;n d&#x1EEF; li&#x1EC7;u t&#x1EEB; RAM t&#x1EDB;i RAM</li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>S&#x1EED; d&#x1EE5;ng CubeIDE sinh code DMA</li><li>S&#x1EED; d&#x1EE5;ng c&#xE1;c function HAL c&#x1EE7;a DMA</li><li>Ki&#x1EC3;m tra c&#xE1;c ch&#x1EE9;c n&#x103;ng b&#x1EB1;ng vi&#x1EC7;c so s&#xE1;nh c&#xE1;c buffer truy&#x1EC1;n nh&#x1EAD;n</li></ul><h2 id="c-u-h-nh-dma">C&#x1EA5;u h&#xEC;nh DMA</h2><h3 id="t-o-project">T&#x1EA1;o project</h3><ul><li>C&#xE1;ch l&#xE0;m t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; 2 b&#xE0;i h&#x1B0;&#x1EDB;ng d&#x1EAB;n tr&#x1B0;&#x1EDB;c File &gt; New &gt; STM32 Project</li><li>V&#x1EDB;i DMA th&#xEC; ch&#xFA;ng ta kh&#xF4;ng c&#x1EA7;n c&#x1EA5;u h&#xEC;nh b&#x1EA5;t k&#x1EF3; ch&#xE2;n n&#xE0;o</li></ul><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><ul><li>Set clock v&#x1EDB;i t&#x1EA7;n s&#x1ED1; t&#x1ED1;i &#x111;a</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-30.png" class="kg-image" alt="STM32CubeIDE DMA M2M" loading="lazy"></figure><h3 id="c-u-h-nh-dma-1">C&#x1EA5;u h&#xEC;nh DMA</h3><ul><li>Th&#x1EBB; Pinout &amp; Configuration &gt; DMA &gt; DMA2 &gt; Add</li><li>Ch&#x1ECD;n MEMTOMEM DMA request</li><li>Normal mode, Increment Address source memory v&#xE0; destination memory </li><li>D&#xF9;ng FIFO</li><li>Byte data width</li><li>Burst size l&#xE0; single</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-31.png" class="kg-image" alt="STM32CubeIDE DMA M2M" loading="lazy"></figure><img src="https://hocarm.org/content/images/2021/09/dma-m2m-feature.png" alt="STM32CubeIDE DMA M2M"><p>Sau &#x111;&#xF3; l&#xE0; save v&#xE0; auto generate code</p><h2 id="workflow">Workflow</h2><h3 id="qu-tr-nh-start-dma-t-ng-t-tim-adc-">Qu&#xE1; tr&#xEC;nh start DMA (t&#x1B0;&#x1A1;ng t&#x1EF1; TIM, ADC)</h3><ul><li>Qu&#xE1; tr&#xEC;nh start non blocking</li><li>K&#x1EBF;t th&#xFA;c c&#x1EE7;a qu&#xE1; tr&#xEC;nh ph&#x1EA3;i &#x111;&#x1B0;&#x1EE3;c check b&#x1EB1;ng polling</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-33.png" class="kg-image" alt="STM32CubeIDE DMA M2M" loading="lazy"></figure><h3 id="return-value">Return value</h3><ul><li>H&#x1EA7;u h&#x1EBF;t function HAL &#x111;&#x1EC1;u c&#xF3; return value v&#x1EDB;i m&#x1EE5;c &#x111;&#xED;ch &#x111;&#x1EC3; th&#xF4;ng b&#xE1;o n&#x1EBF;u ho&#x1EA1;t &#x111;&#x1ED9;ng l&#xE0; th&#xE0;nh c&#xF4;ng, timeout ho&#x1EB7;c l&#xE0; l&#x1ED7;i</li><li>Developer &#x111;&#x1B0;&#x1EE3;c khuy&#x1EBF;n kh&#xED;ch l&#xE0; handle c&#xE1;c gi&#xE1; tr&#x1ECB; return &#x111;&#x1EC3; &#x111;&#x1EA3;m b&#x1EA3;o r&#x1EB1;ng ch&#x1B0;&#x1A1;ng tr&#xEC;nh ch&#x1EA1;y &#x111;&#xFA;ng v&#x1EDB;i mong &#x111;&#x1EE3;i</li></ul><p>M&#x1ECD;i ng&#x1B0;&#x1EDD;i c&#xF3; th&#x1EC3; xem c&#xE1;c return value c&#x1EE7;a DMA d&#x1B0;&#x1EDB;i h&#xEC;nh sau</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-34.png" class="kg-image" alt="STM32CubeIDE DMA M2M" loading="lazy"></figure><h3 id="code">Code</h3><p>Gi&#x1EDD; th&#xEC; m&#x1EDF; file <code>main.c</code> v&#xE0; s&#x1EED;a code, HAL function &#x111;&#x1B0;&#x1EE3;c d&#xF9;ng cho DMA l&#xE0;</p><ul><li><code>HAL_DMA_Start(DMA_HandleTypeDef <em>hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)</em></code></li><li><code><em>HAL_DMA_PollForTransfer(DMA_HandleTypeDef </em>hdma, uint32_t CompleteLevel, uint32_t Timeout)</code></li></ul><p>Ch&#xFA;ng ta c&#x1EA7;n t&#x1EA1;o 2 buffer</p><ul><li>M&#x1ED9;t buffer cho source data</li><li>M&#x1ED9;t cho destination data</li><li><code>HAL_DMA_Start</code> s&#x1EBD; kh&#x1EDF;i &#x111;&#x1ED9;ng qu&#xE1; tr&#xEC;nh transfer data M2M</li><li><code>HAL_DMA_PollForTransfer</code> ki&#x1EC3;m tra qu&#xE1; tr&#xEC;nh transfer k&#x1EBF;t th&#xFA;c th&#xE0;nh c&#xF4;ng hay ch&#x1B0;a.</li></ul><pre><code class="language-C">/* USER CODE BEGIN 0 */
uint8_t Buffer_Src[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
uint8_t Buffer_Dest[10];
/* USER CODE END 0 */
//..
/* USER CODE BEGIN 2 */
  HAL_DMA_Start(&amp;hdma_memtomem_dma2_stream0, (uint32_t)(Buffer_Src), (uint32_t)(Buffer_Dest), 10);
  while (HAL_DMA_PollForTransfer(&amp;hdma_memtomem_dma2_stream0, HAL_DMA_FULL_TRANSFER, 100) != HAL_OK)
  {
    __NOP();
  }

  /* USER CODE END 2 */</code></pre><p>Link code v&#x1EAB;n &#x1EDF; ch&#x1ED7; c&#x169; cho m&#x1ECD;i ng&#x1B0;&#x1EDD;i tham kh&#x1EA3;o</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - hocarm/STM32F4-Discovery-Tutorial: C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeIDE DMA M2M"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeIDE DMA M2M"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[STM32CubeIDE Interrupt]]></title><description><![CDATA[Hướng dẫn lập trình STM32 EXTI Interrupt dùng STM32CubeIDE, hướng dẫn cấu hình gpio, clock, interrupt bằng hình ảnh minh họa, đơn giản dễ hiểu]]></description><link>https://hocarm.org/stm32cubeide-exti-interrupt/</link><guid isPermaLink="false">613340b7e82ae80548b33149</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Fri, 03 Sep 2021 10:52:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/stm32-exti.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>H&#x1ECD;c c&#xE1;ch c&#x1EA5;u h&#xEC;nh ch&#xE2;n EXTI v&#x1EDB;i CubeMX v&#xE0; CubeIDE</li><li>Sinh code v&#xE0; s&#x1EED; d&#x1EE5;ng c&#xE1;c h&#xE0;m HAL</li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>C&#x1EA5;u h&#xEC;nh GPIO v&#xE0; EXTI, sau &#x111;&#xF3; generate code</li><li>T&#x1EA1;o c&#xE1;c h&#xE0;m Callback &#x111;&#x1EC3; b&#x1EAD;t LED</li><li>Ki&#x1EC3;m tra l&#x1EA1;i c&#xE1;c ch&#x1EE9;c n&#x103;ng b&#x1EB1;ng c&#xE1;ch nh&#x1EA5;n n&#xFA;t &#x111;&#x1EC3; b&#x1EAD;t LED</li></ul><h2 id="c-u-h-nh-exti">C&#x1EA5;u h&#xEC;nh EXTI</h2><h3 id="t-o-project">T&#x1EA1;o project </h3><img src="https://hocarm.org/content/images/2021/09/stm32-exti.png" alt="STM32CubeIDE Interrupt"><p>T&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; b&#xE0;i tr&#x1B0;&#x1EDB;c GPIO m&#xEC;nh s&#x1EBD; &#x111;i nhanh qua ph&#x1EA7;n n&#xE0;y</p><ul><li>File &gt; New &gt; STM32 Project</li><li>C&#x1EA5;u h&#xEC;nh LED l&#xE0; GPIO_Output</li><li>C&#x1EA5;u h&#xEC;nh n&#xFA;t nh&#x1EA5;n l&#xE0; GPIO_EXTIX</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-24.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-26.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><p>Ch&#xFA;ng ta s&#x1EBD; set clock v&#x1EDB;i t&#x1EA7;n s&#x1ED1; t&#x1ED1;i &#x111;a nh&#x1B0; v&#xED; d&#x1EE5; GPIO</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-27.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><h3 id="c-u-h-nh-gpio">C&#x1EA5;u h&#xEC;nh GPIO</h3><ul><li>Ch&#x1ECD;n External Interrupt Mode with Rising edge trigger detection</li><li>GPIO Pull-up/Pull-down: No pull-up or pull-down</li><li>PD14 c&#x1EA5;u h&#xEC;nh m&#x1EB7;c &#x111;&#x1ECB;nh nh&#x1B0; b&#xE0;i gpio tr&#x1B0;&#x1EDB;c</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-28.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><h3 id="c-u-h-nh-interrupt">C&#x1EA5;u h&#xEC;nh interrupt</h3><ul><li>Ch&#xFA;ng ta c&#x1EA7;n enable interrupt cho EXTI</li><li>Ch&#x1ECD;n NVIC &gt; NVIC</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-29.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><p>Sau &#x111;&#xF3; ch&#x1ECD;n save &#x111;&#x1EC3; generate code</p><h2 id="workflow">Workflow</h2><p>Ph&#x1EA7;n n&#xE0;y m&#x1EDB;i m&#x1EBB; h&#x1A1;n, h&#xEC;nh &#x1EA3;nh thay cho ng&#xE0;n l&#x1EDD;i n&#xF3;i, m&#x1ECD;i ng&#x1B0;&#x1EDD;i c&#xF3; th&#x1EC3; xem h&#xEC;nh &#x111;&#x1EC3; bi&#x1EBF;t c&#xE1;ch ho&#x1EA1;t &#x111;&#x1ED9;ng c&#x1EE7;a interrupt trong HAL nh&#xE9;</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/workflow-EXTI-1-1.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/workflow-EXTI-2-1.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/workflow-EXTI-3-1.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/workflow-EXTI-4-1.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/workflow-EXTI-5-1.png" class="kg-image" alt="STM32CubeIDE Interrupt" loading="lazy"></figure><h3 id="code">Code</h3><p>M&#x1EDF; IDE</p><ul><li>Gi&#x1EDD; th&#xEC; ta c&#xF3; th&#x1EC3; m&#x1EDF; ph&#x1EA7;n code &#x111;&#x1B0;&#x1EE3;c sinh ra &#x1EDF; Core &gt; Source &gt; main.c</li><li>T&#x1EA1;o function handle EXTI interrupt v&#xE0;o trong tag /* USER CODE BEGIN 4 <em>/v&#xE0; /</em> USER CODE END 4 */</li></ul><p>HAL callback function cho EXTI s&#x1EBD; c&#xF3; t&#xEA;n</p><ul><li><code>void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)</code></li></ul><p>&#x110;&#x1EC3; &#x111;i&#x1EC1;u khi&#x1EC3;n LED ta d&#xF9;ng function</p><ul><li><code>HAL_GPIO_WritePin</code></li></ul><pre><code class="language-C">/* USER CODE BEGIN PFP */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
/* USER CODE END PFP */
//....
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_0) {
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
	} else {
		__NOP();
	}
}
/* USER CODE END 4 */</code></pre><p>Ch&#x1B0;&#x1A1;ng tr&#xEC;nh EXTI b&#x1EA1;n c&#xF3; th&#x1EC3; tham kh&#x1EA3;o t&#x1EA1;i</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeIDE Interrupt"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeIDE Interrupt"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[STM32CubeIDE GPIO]]></title><description><![CDATA[Hướng dẫn lập trình STM32 GPIO dùng STM32CubeIDE, hướng dẫn cấu hình gpio, clock bằng hình ảnh minh họa, đơn giản dễ hiểu]]></description><link>https://hocarm.org/stm32cubeide-gpio/</link><guid isPermaLink="false">610e8d78fb3a257667cca7b9</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Thu, 02 Sep 2021 09:44:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/09/stm32-gpio.png" medium="image"/><content:encoded><![CDATA[<h2 id="m-c-ti-u">M&#x1EE5;c ti&#xEA;u</h2><ul><li>H&#x1ECD;c c&#xE1;ch setup pin v&#xE0; port c&#x1EE7;a GPIO v&#x1EDB;i CubeIDE, CubeMX</li><li>H&#x1ECD;c c&#xE1;ch Generate Code d&#xF9;ng CubeIDE v&#xE0; c&#xE1;ch s&#x1EED; d&#x1EE5;ng HAL function</li></ul><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><ul><li>C&#x1EA5;u h&#xEC;nh GPIO pin trong CubeMX c&#x1EE7;a CubeIDE v&#xE0; sinh code</li><li>Th&#xEA;m v&#xE0;o project 2 h&#xE0;m <code>HAL_Delay</code> v&#xE0; <code>HAL_GPIO_Toggle</code></li><li>Ki&#x1EC3;m tra l&#x1EA1;i c&#xE1;c ch&#x1EE9;c n&#x103;ng b&#x1EAD;t t&#x1EAF;t LED</li></ul><img src="https://hocarm.org/content/images/2021/09/stm32-gpio.png" alt="STM32CubeIDE GPIO"><p>Tr&#x1B0;&#x1EDB;c khi b&#x1EAF;t &#x111;&#x1EA7;u n&#x1EBF;u b&#x1EA1;n ch&#x1B0;a bi&#x1EBF;t v&#x1EC1; STM32CubeIDE c&#xF3; th&#x1EC3; xem qua b&#xE0;i vi&#x1EBF;t sau</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/huong-dan-stm32cubeide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">H&#x1B0;&#x1EDB;ng d&#x1EAB;n s&#x1EED; d&#x1EE5;ng STM32CubeIDE | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Sau khi l&#xE0;m k&#x1EBF; ho&#x1EA1;ch th&#xE2;u t&#xF3;m anh TrueSTUDIO v&#xE0; AC6 SW[/lap-trinh-stm32-tren-linux-voi-systemworkbench/] th&#xEC; anh ST th&#x1EA5;y c&#xF3; v&#x1EBB; nh&#x1B0;nhi&#x1EC1;u tool qu&#xE1;, kh&#xE1;ch h&#xE0;ng ng&#x1B0;&#x1EDD;i d&#xF9;ng c&#x169;ng ch&#xF3;ng m&#x1EB7;t, IDE th&#xEC; l&#x1EAF;m m&#xE0; AC6 th&#xEC;tu&#x1ED5;i g&#xEC; s&#xE1;nh &#x111;&#x1B0;&#x1EE3;c v&#x1EDB;i TrueSTUDIO, th&#xEA;m v&#xE0;o n&#x1EEF;a con h&#xE0;ng CubeMX th&#x1A1;m ngon b&#xE9;o b&#x1EDF;gen code nh&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="STM32CubeIDE GPIO"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">SC</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2020/04/3.png" alt="STM32CubeIDE GPIO"></div></a></figure><h2 id="c-u-h-nh-gpio">C&#x1EA5;u h&#xEC;nh GPIO</h2><h3 id="t-o-project-m-i">T&#x1EA1;o project m&#x1EDB;i</h3><ul><li>File &gt; New &gt; STM32 Project</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><ul><li>Ch&#x1ECD;n chip STM32F4 &gt; STM32F07VETx, sau &#x111;&#xF3; &#x111;i&#x1EC1;n t&#xEA;n project t&#x1B0;&#x1A1;ng &#x1EE9;ng</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-1.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-2.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>C&#x1EA5;u h&#xEC;nh ch&#xE2;n LED l&#xE0; GPIO_Output<br></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-25.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>&#x110;&#xE3; code th&#xEC; l&#xFA;c n&#xE0;o c&#x169;ng c&#xF3; bug n&#xEA;n c&#x1EA7;n ph&#x1EA3;i c&#xF3; debug, m&#xEC;nh khuy&#x1EBF;n kh&#xED;ch m&#x1ECD;i ng&#x1B0;&#x1EDD;i s&#x1EED; d&#x1EE5;ng ch&#xE2;n debug SWD ho&#x1EB7;c JTAG, nh&#xE0; ngh&#xE8;o kh&#xF4;ng c&#xF3; JTAG th&#xEC; ch&#x1A1;i SWD v&#x1EDB;i ST-Link</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-4.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><ul><li>Ch&#x1ECD;n Categories &gt;SYS</li><li>Ch&#x1ECD;n Debug l&#xE0; Serial Wire v&#xE0; b&#x1EA1;n s&#x1EBD; th&#x1EA5;y 2 ch&#xE2;n SYS_TCK_SWCLK v&#xE0; SYS_JTMS_SWDIO s&#x1EBD; hi&#x1EC3;n th&#x1ECB;</li><li>N&#x1EBF;u SWD/JTAG kh&#xF4;ng &#x111;&#x1B0;&#x1EE3;c ch&#x1ECD;n th&#xEC; ch&#xFA;ng ta s&#x1EBD; kh&#xF4;ng d&#xF9;ng &#x111;&#x1B0;&#x1EE3;c debug nh&#xE9;</li></ul><h3 id="c-u-h-nh-clock">C&#x1EA5;u h&#xEC;nh clock</h3><ul><li>V&#xE0;o th&#x1EBB; &#xA0;Clock Configuration</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-5.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><ul><li>Clock configuration n&#xE0;y l&#xE0; m&#x1ED9;t phi&#xEA;n b&#x1EA3;n minh h&#x1ECD;a s&#x1A1; &#x111;&#x1ED3; clock trong RM(Reference Manual DM00031020_stm32f4x_reference_manual.pdf)</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-6.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><ul><li>Clock source c&#xF3; 2 lo&#x1EA1;i &#xA0;internal oscillators v&#xE0; external clock source nh&#x1B0; h&#xEC;nh</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-7.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>V&#x1EDB;i internal oscillator (th&#x1EA1;ch anh n&#x1ED9;i) ta c&#xF3; 2 d&#x1EA1;ng</p><ul><li>LSI</li><li>HSI</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-8.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>V&#x1EDB;i external clock source s&#x1EBD; c&#xF3; 2 d&#x1EA1;ng l&#xE0;</p><ul><li>LSE</li><li>HSE</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-9.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>&#x110;&#x1EC3; enable external clock th&#xEC; c&#x1EA7;n l&#xE0;m nh&#x1B0; sau RCC &gt; High Speed Clock HSE l&#xE0; Crystal Ceramic Resonator</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-10.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>B&#x1EA1;n c&#xF3; th&#x1EC3; th&#x1EA5;y HSE &#x111;&#xE3; hi&#x1EC7;n h&#xEC;nh &#x111;&#x1EC3; m&#xEC;nh c&#xF3; th&#x1EC3; d&#xF9;ng b&#xEA;n th&#x1EBB; Clock Configuration</p><p>Sau &#x111;&#xE2;y l&#xE0; m&#x1ED9;t s&#x1ED1; m&#xF4; t&#x1EA3; c&#x1EE5; th&#x1EC3; v&#x1EC1; clock tree cho core</p><ul><li>System multiplexer</li><li>PLL</li><li>PLL source multiplexer</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-11.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>Core clock t&#x1EEB; HSI, c&#x1EA5;u h&#xEC;nh m&#x1EB7;c &#x111;&#x1ECB;nh sau khi reset</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-12.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>Core clock t&#x1EEB; HSE</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-13.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>Core clock t&#x1EEB; PLL v&#xE0; HSI</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-15.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>Core clock t&#x1EEB; PLL v&#xE0; HSE</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-16.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>AHB, APB prescaler v&#xE0; t&#x1ED1;c &#x111;&#x1ED9; ngo&#x1EA1;i vi</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-17.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>C&#xF2;n nh&#x1EEF;ng clock m&#xE0; c&#xF3; m&#xE0;u x&#xE1;m l&#xE0;m sao &#x111;&#x1EC3; enable n&#xF3; l&#xEA;n ?</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-18.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>MCO1</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-19.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>RTC</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-20.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>USB</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-21.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><h3 id="c-u-h-nh-gpio-pin">C&#x1EA5;u h&#xEC;nh GPIO pin</h3><ul><li>Ch&#x1ECD;n Push Pull mode</li><li>No pull-up v&#xE0; pull-down</li><li>Output speed l&#xE0; HIGH &#x111;&#x1ED1;i v&#x1EDB;i c&#xE1;c ngo&#x1EA1;i vi nh&#x1B0; SPI UART</li><li> &#x1EA4;n n&#xFA;t OK</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/image-22.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><h3 id="c-u-h-nh-t-c-gpio-output">C&#x1EA5;u h&#xEC;nh t&#x1ED1;c &#x111;&#x1ED9; GPIO output</h3><ul><li>Thay &#x111;&#x1ED5;i rising v&#xE0; falling edge khi tr&#x1EA1;ng th&#xE1;i c&#x1EE7;a pin thay &#x111;&#x1ED5;i t&#x1EEB; high qua low v&#xE0; ng&#x1B0;&#x1EE3;c l&#x1EA1;i</li><li>V&#x1EDB;i c&#x1EA5;u h&#xEC;nh GPIO speed c&#xE0;ng cao th&#xEC; s&#x1EBD; l&#xE0;m t&#x103;ng nhi&#x1EC5;u EMI c&#x1EE7;a STM32 v&#xE0; t&#x103;ng n&#x103;ng l&#x1B0;&#x1EE3;ng ti&#xEA;u th&#x1EE5;</li><li>&#x1EDE; &#x111;&#xE2;y t&#x1ED1;t nh&#x1EA5;t l&#xE0; &#x111;&#x1B0;a t&#x1ED1;c &#x111;&#x1ED9; GPIO t&#x1B0;&#x1A1;ng &#x1EE9;ng v&#x1EDB;i t&#x1ED1;c &#x111;&#x1ED9; c&#x1EE7;a ngo&#x1EA1;i vi. V&#xED; d&#x1EE5;: Ch&#x1EDB;p GPIO v&#x1EDB;i 1Hz l&#xE0; LOW &#x111;&#x1EC3; t&#x1ED1;i &#x1B0;u c&#x1EA5;u h&#xEC;nh, nh&#x1B0;ng v&#x1EDB;i SPI th&#xEC; 45MHz th&#xEC; c&#x1EA7;n set HIGH.</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/09/demo-GPIO.png" class="kg-image" alt="STM32CubeIDE GPIO" loading="lazy"></figure><p>Gi&#x1EDD; th&#xEC; ta c&#xF3; th&#x1EC3; Generate Source code b&#x1EB1;ng c&#xE1;ch save l&#x1EA1;i, v&#x1EDB;i CubeMX th&#xF4;ng th&#x1B0;&#x1EDD;ng th&#xEC; b&#x1EA1;n s&#x1EBD; c&#xF3; th&#xEA;m nhi&#x1EC1;u option generate v&#x1EDB;i c&#xE1;c compiler kh&#xE1;c nhau.</p><p>Sau &#x111;&#xF3; quan s&#xE1;t file <code>main.c</code> b&#x1EB1;ng IDE</p><ul><li>Function m&#xE0; b&#x1EA1;n c&#x1EA7;n code s&#x1EBD; n&#x1EB1;m trong main.c ho&#x1EB7;c &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i t&#x1EEB; main.c</li><li>Vi&#x1EBF;t code c&#x1EE7;a m&#xEC;nh v&#xE0;o nh&#x1EEF;ng &#x111;o&#x1EA1;n c&#xF3; BEGIN, END nh&#x1B0; sau &#xA0;<em>/* USER CODE BEGIN 3 */ v&#xE0;</em> <em>/* USER CODE END 3 */ </em></li><li>Code trong v&#xF2;ng l&#x1EB7;p <em>while(1){ }</em></li></ul><p>&#x110;&#x1EC3; blink LED th&#xEC; ta c&#x1EA7;n s&#x1EED; d&#x1EE5;ng 2 function sau &#x111;&#xE2;y</p><ul><li><em><code>HAL_HAL_Delay</code></em></li><li><em><code>HAL_GPIO_WritePin</code> ho&#x1EB7;c <code>HAL_GPIO_TogglePin</code></em></li></ul><pre><code class="language-C">/* USER CODE BEGIN 3 */
  HAL_Delay(500);
  HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);
/* USER CODE END 3 */</code></pre><p>Ch&#x1B0;&#x1A1;ng tr&#xEC;nh GPIO c&#x1A1; b&#x1EA3;n b&#x1EA1;n c&#xF3; th&#x1EC3; xem &#x1EDF; &#x111;&#xE2;y</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeIDE GPIO"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeIDE GPIO"></div></a></figure><h2></h2><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Học STM32CubeMonitor cơ bản]]></title><description><![CDATA[Hướng dẫn STM32CubeMonitor, cấu hình flow, kết nối board STM32 qua ST-Link, lấy tên variable, đọc ghi register,address, kéo thả widget và tạo dashboard]]></description><link>https://hocarm.org/stm32cubemonitor-co-ban/</link><guid isPermaLink="false">612253050dfb9204fa84dbef</guid><category><![CDATA[STM32]]></category><category><![CDATA[New Update]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Thu, 19 Aug 2021 13:53:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/08/stm32cubemonitor-tutorial.png" medium="image"/><content:encoded><![CDATA[<img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-tutorial.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"><p>Ngay t&#x1EEB; &#x111;&#x1EA7;u khi bi&#x1EBF;t t&#x1EDB;i STM32CubeMonitor th&#xEC; &#x111;&#x1ED9;ng l&#x1EF1;c tr&#xE0;n tr&#x1EC1; &#x111;&#x1EC3; m&#xEC;nh vi&#x1EBF;t tut cho n&#xF3; &#x111;&#xE3; n&#x1ED5; ra trong &#x111;&#x1EA7;u, nghe kinh h&#xE3;i th&#x1EBF; t&#x1EE5;c kh&#xF4;ng anh em, n&#xF3;i ch&#x1EE9; thanh ni&#xEA;n n&#xE0;y &#x111;&#x1B0;&#x1EE3;c ST t&#x1EAD;n d&#x1EE5;ng tri&#x1EC7;t &#x111;&#x1EC3; tool m&#xE0; c&#xE1;c &#x111;&#x1EA1;i gia l&#x1EDB;n kh&#xE1;c kh&#xF4;ng l&#xE0;m n&#x1EEF;a l&#xE0; Node-RED &#x111;&#x1EC3; l&#xE0;m n&#xEA;n m&#x1ED9;t tool v&#xF4; c&#xF9;ng vi di&#x1EC7;u v&#xE0; tr&#x1EF1;c quan, c&#xF3; th&#x1EC3; &#x111;&#x1B0;&#x1EE3;c xem nh&#x1B0; l&#xE0; LabVIEW t&#xE1;i th&#x1EBF; v&#x1EAD;y &#x111;&#xF3; c&#xE1;c b&#x1EA1;n.</p><p>H&#xF4;m tr&#x1B0;&#x1EDB;c m&#xEC;nh c&#xF3; l&#x1EE1; gi&#x1EDB;i thi&#x1EC7;u nhi&#x1EC1;u qu&#xE1; v&#x1EC1; n&#xF3; n&#xEA;n gi&#x1EDD; c&#x169;ng kh&#xF4;ng c&#xF2;n &#xFD; t&#x1B0;&#x1EDF;ng g&#xEC; m&#x1EDB;i &#x111;&#x1EC3; c&#x1EAD;p nh&#x1EAD;t v&#xE0;o &#x111;&#xE2;y. T&#x1EA5;t c&#x1EA3; l&#x1EDD;i v&#xE0;ng ng&#x1ECD;c n&#x1EB1;m trong b&#xE0;i &#x111;&#x1EA7;u ti&#xEA;n r&#x1ED3;i nh&#xE9; anh em, b&#xE0;i n&#xE0;y &#x111;&#x1EA7;y &#x111;&#x1EE7; h&#x1B0;&#x1EDB;ng d&#x1EAB;n t&#x1EEB; c&#xE0;i &#x111;&#x1EB7;t t&#x1EDB;i c&#xE1;c kh&#xE1;i ni&#x1EC7;m t&#x1EDB;i v&#xED; d&#x1EE5;, &#xE0; h&#xEC;nh nh&#x1B0; c&#xE0;i &#x111;&#x1EB7;t m&#x1EDB;i note tr&#xEA;n linux, windows xin ph&#xE9;p c&#xE1;o b&#x1EAD;n note l&#x1EA1;i s&#x1EBD; update sau, c&#xE1;ch l&#xE0;m th&#xEC; t&#x1B0;&#x1A1;ng t&#x1EF1; kh&#xE1; d&#x1EC5; d&#xE0;ng n&#xEA;n ae c&#x1EE9; try hard th&#x1EED; xem</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/gioi-thieu-stm32cubemonitor/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">H&#x1B0;&#x1EDB;ng d&#x1EAB;n s&#x1EED; d&#x1EE5;ng STM32CubeMonitor | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">H&#xF4;m nay trong qu&#xE1; tr&#xEC;nh t&#xEC;m l&#x1EA1;i tool STMStudio th&#xEC; v&#xF4; t&#xEC;nh m&#xEC;nh &#x111;&#xE3; th&#x1EA5;y n&#xF3; &#x111;&#xE3;qu&#xE1; c&#x169; v&#xE0; kh&#xF4;ng c&#xF2;n &#x111;&#x1B0;&#x1EE3;c khuy&#x1EBF;n kh&#xED;ch s&#x1EED; d&#x1EE5;ng n&#x1EEF;a, thay v&#xE0;o &#x111;&#xF3; l&#x1EA1;i l&#xE0; m&#x1ED9;t toolr&#x1EA5;t m&#x1EDB;i nh&#x1B0;ng kh&#xF4;ng h&#x1EC1; xa l&#x1EA1; v&#x1EDB;i ch&#xFA;ng ta. STM32CubeMonitor. Nay chia s&#x1EBB; cho anhem c&#xF9;ng t&#xEC;m hi&#x1EC3;u v&#x1EC1; tool n&#xE0;y xem n&#xF3; ngon l&#xE0;nh nh&#x1B0; th&#x1EBF; n&#xE0;o nh&#xE9;&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-feature-1.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"></div></a></figure><p>V&#xEC; c&#xE0;i xong l&#xE0; n&#xF3; c&#xF3; s&#x1EB5;n v&#xED; d&#x1EE5; r&#x1ED3;i n&#xEA;n m&#x1ECD;i ng&#x1B0;&#x1EDD;i c&#x1EE9; ch&#x1EE7; &#x111;&#x1ED9;ng s&#x1EED;a project c&#xF3; s&#x1EB5;n, &#x1EDF; &#x111;&#xE2;y c&#xF3; 2 ph&#x1EA7;n, m&#x1ED9;t l&#xE0; code tr&#xEA;n CubeMonitor, 2 l&#xE0; code tr&#xEA;n firmware c&#x1EE7;a ch&#xFA;ng ta, v&#x1EDB;i kit F4 Discovery c&#xF3; s&#x1EB5;n th&#xEC; m&#xEC;nh n&#x1EA1;p 1 firmware xu&#x1ED1;ng v&#xE0; d&#xF9;ng CubeMonitor &#x111;&#x1ECD;c value c&#x1EE7;a n&#xF3; hi&#x1EC3;n th&#x1ECB; l&#xEA;n Dashboard th&#xF4;i, c&#xE1;ch l&#xE0;m m&#x1EDD;i m&#x1ECD;i ng&#x1B0;&#x1EDD;i ngh&#xED;a qua b&#xE0;i vi&#x1EBF;t</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/stm32cubemonitor-doc-gia-tri-bien-tu-ram/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">STM32CubeMonitor &#x111;&#x1ECD;c gi&#xE1; tr&#x1ECB; c&#x1EE7;a bi&#x1EBF;n | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Trong b&#xE0;i tr&#x1B0;&#x1EDB;c ch&#xFA;ng ta &#x111;&#xE3; l&#xE0;m quen v&#x1EDB;i STM32CubeMonitor, t&#xEC;m hi&#x1EC3;u &#x111;&#x1B0;&#x1EE3;c c&#xE1;cch&#x1EE9;c n&#x103;ng c&#x1EE7;a n&#xF3;, c&#x169;ng nh&#x1B0; c&#xE1;ch n&#xF3; l&#xE0;m vi&#x1EC7;c v&#xE0; k&#xE8;m theo v&#xE0;i v&#xED; d&#x1EE5; &#x111;&#x1A1;n gi&#x1EA3;n, h&#xF4;mnay m&#xEC;nh ti&#x1EBF;p t&#x1EE5;c nghi&#xEA;n c&#x1EE9;u th&#xEA;m 1 ch&#xFA;t v&#x1EDB;i thanh ni&#xEA;n n&#xE0;y &#x111;&#x1EC3; xem n&#xF3; c&#xF3; th&#x1EC3; l&#xE0;m&#x111;&#x1B0;&#x1EE3;c th&#xEA;m g&#xEC; n&#x1EEF;a. &#x1EDE; b&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh s&#x1EBD; t&#xEC;m hi&#x1EC3;u v&#x1EC1; c&#xE1;ch rea&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-readvar-feature.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"></div></a></figure><p>C&#xF3; &#x111;&#x1ECD;c th&#xEC; ph&#x1EA3;i c&#xF3; ghi, ghi v&#xE0;o bi&#x1EBF;n ra sao th&#xEC; l&#x1EA1;i ph&#x1EA3;i xem b&#xE0;i d&#x1B0;&#x1EDB;i &#x111;&#xE2;y r&#x1ED3;i</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/stm32cubemonitor-ghi-gia-tri-vao-bien/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">STM32CubeMonitor ghi gi&#xE1; tr&#x1ECB; c&#x1EE7;a bi&#x1EBF;n v&#xE0;o RAM | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Trong b&#xE0;i vi&#x1EBF;t tr&#x1B0;&#x1EDB;c ch&#xFA;ng ta &#x111;&#xE3; t&#xEC;m hi&#x1EC3;u c&#xE1;ch &#x111;&#x1EC3; &#x111;&#x1ECD;c gi&#xE1; tr&#x1ECB; t&#x1EEB; RAM l&#xEA;n, trongb&#xE0;i vi&#x1EBF;t h&#xF4;m nay m&#xEC;nh s&#x1EBD; th&#x1EF1;c hi&#x1EC7;n c&#xE1;ch ghi gi&#xE1; tr&#x1ECB; xu&#x1ED1;ng bi&#x1EBF;n. V&#x1EAB;n s&#x1EED; d&#x1EE5;ng &#x111;o&#x1EA1;ncode CubeIDE c&#x169; &#x1EDF; b&#xE0;i s&#x1ED1; 1 v&#xE0; ti&#x1EBF;p t&#x1EE5;c &#x111;i&#x1EC1;u ch&#x1EC9;nh thay &#x111;&#x1ED5;i tr&#xEA;n STM32CubeMonitorth&#xF4;i nha ae Th&#xEA;m WidgetHi&#x1EC7;n t&#x1EA1;i kh&#xF4;ng c&#xF3; c&#xE1;ch n&#xE0;o &#x111;&#x1EC3; wri&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-writevar-feature.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"></div></a></figure><p>Xong xu&#xF4;i c&#x1A1; b&#x1EA3;n v&#x1EDB;i bi&#x1EBF;n r&#x1ED3;i th&#xEC; gi&#x1EDD; l&#xE0; truy xu&#x1EA5;t thanh ghi, &#x111;&#x1ECD;c ghi c&#xE1;c gi&#xE1; tr&#x1ECB; v&#xE0;o thanh ghi, c&#xE1;i n&#xE0;y l&#xE0; c&#xE1;i h&#x1EA5;p d&#x1EAB;n nh&#x1EA5;t m&#xE0; h&#x1ED3;i l&#xE0;m NodeRED m&#xEC;nh c&#x169;ng ch&#x1B0;a bao gi&#x1EDD; ngh&#x129; t&#x1EDB;i. B&#xE0;i n&#xE0;y c&#xF3; coi datasheet t&#x1EA1;o b&#x1EA3;ng set thanh ghi &#x111;&#x1ED3; ho&#xE0;nh tr&#xE1;ng l&#x1EAF;m. Coi ngay th&#xF4;i</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/stm32cubemonitor-tuong-tac-thanh-ghi/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">STM32CubeMonitor &#x111;&#x1ECD;c ghi thanh ghi | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">V&#x1EAD;y l&#xE0; &#x111;&#xE3; qua 2 b&#xE0;i vi&#x1EBF;t v&#x1EDB;i STM32CubeMonitor, c&#xE1;c b&#x1EA1;n &#x111;&#xE3; bi&#x1EBF;t c&#xE1;ch &#x111;&#x1EC3; &#x111;&#x1ECD;c d&#x1EEF;li&#x1EC7;u v&#xE0; ghi d&#x1EEF; li&#x1EC7;u xu&#x1ED1;ng d&#x1B0;&#x1EDB;i kit STM32F4 discovery th&#xF4;ng qua nh&#x1EEF;ng h&#xEC;nh minhh&#x1ECD;a tr&#x1EF1;c quan sinh &#x111;&#x1ED9;ng s&#x1B0;&#x1EDB;ng m&#x1EAF;t r&#x1ED3;i, kh&#xF4;ng bi&#x1EBF;t anh em c&#xF3; c&#xF2;n th&#x1EAF;c m&#x1EAF;c g&#xEC;kh&#xF4;ng nh&#x1EC9; ? N&#x1EBF;u kh&#xF4;ng h&#xF4;m nay m&#xEC;nh qua b&#xE0;i m&#x1EDB;i, &#x111;&#x1ECD;c ghi tr&#x1EF1;c ti&#x1EBF;p t&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-register.png" alt="H&#x1ECD;c STM32CubeMonitor c&#x1A1; b&#x1EA3;n"></div></a></figure><p>C&#xF2;n 1 2 b&#xE0;i n&#x1EEF;a nh&#x1B0;ng m&#xE0; &#x111;&#x1EA7;u &#xF3;c c&#x169;ng m&#x1EE5; m&#x1ECB; r&#x1ED3;i, n&#xEA;n l&#x1EA1;i h&#x1EB9;n ace update sau nh&#xE1;.</p><p>Sau nh&#x1EEF;ng b&#xE0;i n&#xE0;y s&#x1EBD; c&#xF3; update 1 series v&#x1EC1; NodeRED cho anh ch&#x1ECB; em h&#xF3;ng lu&#xF4;n cho n&#xF3;ng.</p>]]></content:encoded></item><item><title><![CDATA[STM32CubeMonitor - Tương tác với thanh ghi]]></title><description><![CDATA[Hướng dẫn sử dụng STM32CubeMonitor để đọc ghi giá trị thanh ghi, điều khiển led thông qua thanh ghi GPIOD_ODR và quan sát qua dashboard]]></description><link>https://hocarm.org/stm32cubemonitor-tuong-tac-thanh-ghi/</link><guid isPermaLink="false">610fede6fb3a257667ccaa04</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Thu, 12 Aug 2021 14:46:29 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/08/stm32cubemonitor-register.png" medium="image"/><content:encoded><![CDATA[<img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-register.png" alt="STM32CubeMonitor - T&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i thanh ghi"><p>V&#x1EAD;y l&#xE0; &#x111;&#xE3; qua 2 b&#xE0;i vi&#x1EBF;t v&#x1EDB;i STM32CubeMonitor, c&#xE1;c b&#x1EA1;n &#x111;&#xE3; bi&#x1EBF;t c&#xE1;ch &#x111;&#x1EC3; &#x111;&#x1ECD;c d&#x1EEF; li&#x1EC7;u v&#xE0; ghi d&#x1EEF; li&#x1EC7;u xu&#x1ED1;ng d&#x1B0;&#x1EDB;i kit STM32F4 discovery th&#xF4;ng qua nh&#x1EEF;ng h&#xEC;nh minh h&#x1ECD;a tr&#x1EF1;c quan sinh &#x111;&#x1ED9;ng s&#x1B0;&#x1EDB;ng m&#x1EAF;t r&#x1ED3;i, kh&#xF4;ng bi&#x1EBF;t anh em c&#xF3; c&#xF2;n th&#x1EAF;c m&#x1EAF;c g&#xEC; kh&#xF4;ng nh&#x1EC9; ? N&#x1EBF;u kh&#xF4;ng h&#xF4;m nay m&#xEC;nh qua b&#xE0;i m&#x1EDB;i, &#x111;&#x1ECD;c ghi tr&#x1EF1;c ti&#x1EBF;p thanh ghi ngo&#x1EA1;i vi</p><h2 id="-c-ghi-v-o-a-ch-">&#x110;&#x1ECD;c ghi v&#xE0;o &#x111;&#x1ECB;a ch&#x1EC9;</h2><p>Nh&#x1B0; ch&#xFA;ng ta &#x111;&#xE3; bi&#x1EBF;t th&#xEC; t&#x1EA5;t c&#x1EA3; c&#xE1;c &#x111;&#x1ECB;a ch&#x1EC9; c&#x1EE7;a thanh ghi &#x111;&#x1EC1;u c&#xF3; th&#x1EC3; truy c&#x1EAD;p &#x111;&#x1B0;&#x1EE3;c, tuy nhi&#xEA;n m&#x1ED9;t s&#x1ED1; thanh ghi s&#x1EBD; kh&#xF4;ng c&#xF3; bi&#x1EBF;n &#x1EDF; trong file elf. V&#x1EAD;y l&#xE0;m th&#x1EBF; n&#xE0;o m&#xE0; ch&#xFA;ng ta c&#xF3; th&#x1EC3; &#x111;&#x1ECD;c n&#xF3; m&#xE0; kh&#xF4;ng c&#xF3; t&#xEA;n c&#x1EE5; th&#x1EC3; ?</p><p>X&#xE9;t m&#x1ED9;t v&#xED; d&#x1EE5; &#x1EDF; kit F407 discovery ch&#xFA;ng ta c&#xF3; schematic nh&#x1B0; sau</p><p><a href="https://www.st.com/resource/en/user_manual/dm00039084-discovery-kit-with-stm32f407vg-mcu-stmicroelectronics.pdf">https://www.st.com/resource/en/user_manual/dm00039084-discovery-kit-with-stm32f407vg-mcu-stmicroelectronics.pdf</a></p><p>4 LED c&#xF3; s&#x1EB5;n trong &#x111;&#xF3; 2 LED g&#x1EAF;n v&#x1EDB;i ch&#xE2;n PD12 m&#xE0;u xanh l&#xE1;, PD13 m&#xE0;u cam.</p><p>Nh&#x1EEF;ng LED n&#xE0;y s&#x1EBD; ON khi tr&#x1EA1;ng th&#xE1;i I/O c&#x1EE7;a n&#xF3; l&#xE0; 1 v&#xE0; ng&#x1B0;&#x1EE3;c l&#x1EA1;i</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-50.png" class="kg-image" alt="STM32CubeMonitor - T&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i thanh ghi" loading="lazy"></figure><p>Theo t&#xE0;i li&#x1EC7;u RM <a href="https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf">https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf</a></p><p>GPIOD base address l&#xE0; <code>0x40020C00</code></p><p>Thanh ghi ODR s&#x1EBD; c&#xF3; offset <code>0x14</code>, lowest byte c&#x1EE7;a thanh ghi ODR l&#xE0; <code>0x40020C14</code></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-47.png" class="kg-image" alt="STM32CubeMonitor - T&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i thanh ghi" loading="lazy"></figure><p>Ta s&#x1EBD; c&#xF3; b&#x1EA3;ng &#x111;&#x1EC3; control value output c&#x1EE7;a c&#xE1;c LED th&#xF4;ng qua c&#xE1;c thanh ghi nh&#x1B0; sau</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Green LED PD12</th>
<th>Orange LED PD13</th>
<th>ODR(bin)</th>
<th>ODR(hex)</th>
<th>ODR(dec)</th>
</tr>
</thead>
<tbody>
<tr>
<td>ON</td>
<td>ON</td>
<td>0b11000000000000</td>
<td>0x3000</td>
<td>12288</td>
</tr>
<tr>
<td>OFF</td>
<td>ON</td>
<td>0b01000000000000</td>
<td>0x1000</td>
<td>4096</td>
</tr>
<tr>
<td>ON</td>
<td>OFF</td>
<td>0b10000000000000</td>
<td>0x2000</td>
<td>8192</td>
</tr>
<tr>
<td>OFF</td>
<td>OFF</td>
<td>0b00000000000000</td>
<td>0x0000</td>
<td>0</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h2 id="th-m-a-ch-v-o-variable-list">Th&#xEA;m &#x111;&#x1ECB;a ch&#x1EC9; v&#xE0;o variable list</h2><p>Click chu&#x1ED9;t v&#xE0;o <code>myVarConfig</code> node &#x111;&#x1EC3; ch&#x1EC9;nh l&#x1EA1;i thu&#x1ED9;c t&#xED;nh nh&#x1B0; h&#xEC;nh</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-48.png" class="kg-image" alt="STM32CubeMonitor - T&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i thanh ghi" loading="lazy"></figure><h2 id="-i-u-ch-nh-source-code-cubeide">&#x110;i&#x1EC1;u ch&#x1EC9;nh source code CubeIDE</h2><p>C&#xE1;c b&#x1EA1;n c&#x1EA7;n kh&#x1EDF;i t&#x1EA1;o GPIO l&#x1EA1;i nh&#x1B0; h&#xEC;nh d&#x1B0;&#x1EDB;i v&#x1EDB;i PD12 PD13 l&#xE0; GPIO_Output v&#xE0; comment out l&#x1EA1;i ph&#x1EA7;n blink LED</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-46.png" class="kg-image" alt="STM32CubeMonitor - T&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i thanh ghi" loading="lazy"></figure><p>Sau khi generate th&#xEC; ch&#x1B0;&#x1A1;ng tr&#xEC;nh ch&#xED;nh ch&#x1EC9; c&#xF2;n nh&#x1B0; n&#xE0;y</p><pre><code class="language-C">  // ....
  while (1)
  {
	  HAL_Delay(500);
	  //HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
	  basicCounter += 1;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
    // ....</code></pre><h2 id="k-t-qu-">K&#x1EBF;t qu&#x1EA3;</h2><p>Gi&#x1EDD; th&#xEC; m&#x1EDF; Dashboard l&#xEA;n v&#xE0; &#x1EA5;n v&#xE0;o Start Acquisition. Ta c&#xF3; th&#x1EC3; &#x111;i&#x1EC1;u khi&#x1EC3;n &#x111;&#x1B0;&#x1EE3;c LED t&#x1EAF;t s&#xE1;ng th&#xF4;ng qua dashboard, b&#x1EA1;n c&#xF3; th&#x1EC3; nh&#x1EAD;p c&#xE1;c gi&#xE1; tr&#x1ECB; t&#x1B0;&#x1A1;ng &#x1EE9;ng v&#xE0;o &#xF4; GPIOD_ODR v&#xE0; quan s&#xE1;t LED s&#xE1;ng t&#x1EAF;t tr&#xEA;n kit.</p><blockquote>L&#x1B0;u &#xFD;: N&#x1EBF;u file elf c&#x1EE7;a ch&#xFA;ng ta c&#xF3; thay &#x111;&#x1ED5;i do build l&#x1EA1;i code th&#xEC; c&#xE1;c b&#x1EA1;n nh&#x1EDB; click v&#xE0;o node &#x111;&#x1EC3; update l&#x1EA1;i nh&#xE9;</blockquote><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-49.png" class="kg-image" alt="STM32CubeMonitor - T&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i thanh ghi" loading="lazy"></figure><h2 id="k-t">K&#x1EBF;t</h2><p>V&#x1EAD;y l&#xE0; ch&#xFA;ng ta &#x111;&#xE3; bi&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c c&#xE1;ch &#x111;&#x1EC3; c&#x1EA5;u h&#xEC;nh flow, l&#xE0;m sao &#x111;&#x1EC3; k&#x1EBF;t n&#x1ED1;i &#x111;&#x1B0;&#x1EE3;c v&#x1EDB;i board STM32 th&#xF4;ng qua ST-Link, l&#xE0;m sao &#x111;&#x1EC3; l&#x1EA5;y &#x111;&#x1B0;&#x1EE3;c t&#xEA;n variable name trong file excecutable. L&#xE0;m sao &#x111;&#x1EC3; truy c&#x1EAD;p &#x111;&#x1B0;&#x1EE3;c b&#x1ED9; nh&#x1EDB; c&#x1EE7;a STM32, c&#xE1;ch &#x111;&#x1ECD;c ghi s&#x1EED; d&#x1EE5;ng t&#xEA;n bi&#x1EBF;n v&#xE0; s&#x1EED; d&#x1EE5;ng &#x111;&#x1ECB;a ch&#x1EC9;. C&#xE1;ch &#x111;&#x1EC3; k&#xE9;o th&#x1EA3; widget v&#xE0;o dashboard c&#x169;ng nh&#x1B0; th&#xEA;m c&#xE1;c flow m&#x1EDB;i c&#x169;ng nh&#x1B0; k&#x1EBF;t n&#x1ED1;i c&#xE1;c node l&#x1EA1;i v&#x1EDB;i nhau. Th&#x1EBF; c&#x169;ng l&#xE0; &#x111;&#x1EE7; x&#xE0;i &#x111;&#x1EC3; ti&#x1EBF;p t&#x1EE5;c ph&#xE1;t tri&#x1EC3;n r&#x1ED3;i anh ch&#x1ECB; em &#x1A1;i.</p>]]></content:encoded></item><item><title><![CDATA[STM32CubeMonitor - Ghi giá trị vào biến]]></title><description><![CDATA[Hướng dẫn sử dụng STM32CubeMonitor ghi giá trị của biến vào bộ nhớ RAM của MCU, cách thêm button vào dashboard và ghi dữ liệu vào biến trong firmware có sẵn]]></description><link>https://hocarm.org/stm32cubemonitor-ghi-gia-tri-vao-bien/</link><guid isPermaLink="false">610fedbefb3a257667cca9fd</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Fri, 06 Aug 2021 15:07:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/08/stm32cubemonitor-writevar-feature.png" medium="image"/><content:encoded><![CDATA[<img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-writevar-feature.png" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n"><p>Trong b&#xE0;i vi&#x1EBF;t tr&#x1B0;&#x1EDB;c ch&#xFA;ng ta &#x111;&#xE3; t&#xEC;m hi&#x1EC3;u c&#xE1;ch &#x111;&#x1EC3; &#x111;&#x1ECD;c gi&#xE1; tr&#x1ECB; t&#x1EEB; RAM l&#xEA;n, trong b&#xE0;i vi&#x1EBF;t h&#xF4;m nay m&#xEC;nh s&#x1EBD; th&#x1EF1;c hi&#x1EC7;n c&#xE1;ch ghi gi&#xE1; tr&#x1ECB; xu&#x1ED1;ng bi&#x1EBF;n. V&#x1EAB;n s&#x1EED; d&#x1EE5;ng &#x111;o&#x1EA1;n code CubeIDE c&#x169; &#x1EDF; b&#xE0;i s&#x1ED1; 1 v&#xE0; ti&#x1EBF;p t&#x1EE5;c &#x111;i&#x1EC1;u ch&#x1EC9;nh thay &#x111;&#x1ED5;i tr&#xEA;n STM32CubeMonitor th&#xF4;i nha ae</p><h2 id="th-m-widget">Th&#xEA;m Widget</h2><p>Hi&#x1EC7;n t&#x1EA1;i kh&#xF4;ng c&#xF3; c&#xE1;ch n&#xE0;o &#x111;&#x1EC3; write v&#xE0;o bi&#x1EBF;n, do &#x111;&#xF3; m&#xEC;nh s&#x1EBD; d&#xF9;ng 1 c&#xE1;ch kh&#xE1;c &#x111;&#xF3; l&#xE0; l&#x1EA5;y Node trong write panel widget &#x111;&#x1EC3; l&#xE0;m vi&#x1EC7;c n&#xE0;y</p><p>K&#xE9;o th&#x1EA3; <code>write panel</code> v&#xE0;o trong flow editor</p><ul><li>Click v&#xE0;o <code>write panel</code> node v&#xE0; gi&#x1EEF; chu&#x1ED9;t</li><li>K&#xE9;o th&#x1EA3; n&#xF3; v&#xE0;o flow editor</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-36.png" class="kg-image" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n" loading="lazy"></figure><p>Ch&#x1EC9;nh thu&#x1ED9;c t&#xED;nh cho <code>write panel</code></p><ul><li>&#x110;&#xFA;p chu&#x1ED9;t v&#xE0;o <code>write panel</code>, Group s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c set t&#x1EF1; &#x111;&#x1ED9;ng v&#x1EDB;i nh&#x1EEF;ng g&#xEC; t&#x1ED3;n t&#x1EA1;i, &#x1EDF; &#x111;&#xE2;y UI Group tr&#xEA;n dashboard = Chart v&#xE0; Tab s&#x1EBD; l&#xE0; [Home], b&#x1EA1;n c&#xF3; th&#x1EC3; t&#x1EA1;o nhi&#x1EC1;u group tr&#xEA;n dashboard, v&#xE0; nhi&#x1EC1;u flow c&#xF3; th&#x1EC3; &#x111;&#x1B0;&#x1EE3;c m&#x1EDF; tr&#xEA;n flow editor. N&#xF3;i &#x111;&#x1A1;n gi&#x1EA3;n &#x111;&#xE2;y l&#xE0; b&#x1B0;&#x1EDB;c s&#x1EBD; th&#xEA;m 1 button v&#xE0;o trong dashboard, n&#xF3;i th&#x1EBF; cho n&#xF3; vu&#xF4;ng.</li><li>Click v&#xE0;o &quot;Done&quot; v&#x1EDB;i Name l&#xE0; t&#xF9;y ch&#x1ECD;n b&#x1EA1;n c&#xF3; th&#x1EC3; nh&#x1EAD;p v&#xE0;o ho&#x1EB7;c kh&#xF4;ng</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-37.png" class="kg-image" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n" loading="lazy"></figure><p>Deploy v&#xE0; quan s&#xE1;t tr&#xEA;n Dashboard, b&#x1EA1;n s&#x1EBD; th&#x1EA5;y n&#xFA;t <code>write panel</code> &#x111;&#x1B0;&#x1EE3;c add v&#xE0;o, click th&#x1EED; v&#xE0;i ph&#xE1;t cho s&#x1B0;&#x1EDB;ng t&#xED; tr&#x1B0;&#x1EDB;c khi th&#xEA;m bi&#x1EBF;n</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-38.png" class="kg-image" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n" loading="lazy"></figure><h2 id="th-m-bi-n">Th&#xEA;m bi&#x1EBF;n</h2><p>Th&#xEA;m m&#x1ED9;t link n&#x1ED1;i gi&#x1EEF;a myVarConfig node v&#xE0; write panel node, ph&#x1EA7;n input s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c th&#x1EC3; hi&#x1EC7;n b&#x1EB1;ng m&#xE0;u cam nha ae</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-42.png" class="kg-image" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n" loading="lazy"></figure><h2 id="k-ch-ho-t-ch-c-n-ng-write">K&#xED;ch ho&#x1EA1;t ch&#x1EE9;c n&#x103;ng &quot;Write&quot;</h2><p>L&#xE0;m ti&#x1EBF;p m&#x1ED9;t k&#x1EBF;t n&#x1ED1;i n&#x1EEF;a n&#x1ED1;i gi&#x1EEF;a write panel v&#xE0; myProbe_Out, sau khi deploy xong th&#xEC; &#x1EA5;n n&#xFA;t WRITE s&#x1EBD; t&#x1EA1;o ra m&#x1ED9;t message g&#x1EED;i t&#x1EDB;i ST-LINK</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-43.png" class="kg-image" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n" loading="lazy"></figure><h2 id="monitor">Monitor</h2><p>Gi&#x1EDD; th&#xEC; deploy v&#xE0; xem dashboard, sau &#x111;&#xF3; &#x1EA5;n START ACQUISITION, ta s&#x1EBD; th&#x1EA5;y basicCounter trong list c&#x1EE7;a write panel</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-44.png" class="kg-image" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n" loading="lazy"></figure><p>Ti&#x1EBF;p theo ta c&#xF3; th&#x1EC3; ghi value v&#xE0;o textbox nh&#x1B0; h&#xEC;nh d&#x1B0;&#x1EDB;i, sau &#x111;&#xF3; &#x1EA5;n n&#xFA;t Write, k&#x1EBF;t qu&#x1EA3; gi&#xE1; tr&#x1ECB; basicValue s&#x1EBD; thay &#x111;&#x1ED5;i theo</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-45.png" class="kg-image" alt="STM32CubeMonitor - Ghi gi&#xE1; tr&#x1ECB; v&#xE0;o bi&#x1EBF;n" loading="lazy"></figure><h2 id="k-t">K&#x1EBF;t</h2><p>V&#x1EAD;y l&#xE0; ta c&#xF3; th&#x1EC3; &#x111;&#x1ECD;c value c&#x169;ng nh&#x1B0; ghi 1 value ta mong mu&#x1ED1;n xu&#x1ED1;ng d&#x1B0;&#x1EDB;i kit r&#x1ED3;i, gi&#x1EDD; th&#xEC; b&#x1EA1;n c&#xF3; th&#x1EC3; ngh&#x1EC9; ng&#x1A1;i &#x111;&#x1EC3; chu&#x1EA9;n b&#x1ECB; ti&#x1EBF;p t&#x1EE5;c quay l&#x1EA1;i v&#x1EDB;i ph&#x1EA7;n &#x111;&#x1ECD;c/ghi v&#xE0;o thanh ghi tr&#xEA;n MCU &#x1EDF; b&#xE0;i vi&#x1EBF;t ti&#x1EBF;p theo</p>]]></content:encoded></item><item><title><![CDATA[STM32CubeMonitor - Đọc giá trị biến từ RAM]]></title><description><![CDATA[Cách dùng CubeIDE lập trình STM32 để tạo ra một biến tăng dần và đọc hiển thị giá trị của biến đó thông qua STM32CubeMonitor]]></description><link>https://hocarm.org/stm32cubemonitor-doc-gia-tri-bien-tu-ram/</link><guid isPermaLink="false">610fed5afb3a257667cca9f3</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Fri, 30 Jul 2021 15:33:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/08/stm32cubemonitor-readvar-feature.png" medium="image"/><content:encoded><![CDATA[<img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-readvar-feature.png" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM"><p>Trong b&#xE0;i tr&#x1B0;&#x1EDB;c ch&#xFA;ng ta &#x111;&#xE3; l&#xE0;m quen v&#x1EDB;i STM32CubeMonitor, t&#xEC;m hi&#x1EC3;u &#x111;&#x1B0;&#x1EE3;c c&#xE1;c ch&#x1EE9;c n&#x103;ng c&#x1EE7;a n&#xF3;, c&#x169;ng nh&#x1B0; c&#xE1;ch n&#xF3; l&#xE0;m vi&#x1EC7;c &#xA0;v&#xE0; k&#xE8;m theo v&#xE0;i v&#xED; d&#x1EE5; &#x111;&#x1A1;n gi&#x1EA3;n, h&#xF4;m nay m&#xEC;nh ti&#x1EBF;p t&#x1EE5;c nghi&#xEA;n c&#x1EE9;u th&#xEA;m 1 ch&#xFA;t v&#x1EDB;i thanh ni&#xEA;n n&#xE0;y &#x111;&#x1EC3; xem n&#xF3; c&#xF3; th&#x1EC3; l&#xE0;m &#x111;&#x1B0;&#x1EE3;c th&#xEA;m g&#xEC; n&#x1EEF;a. &#x1EDE; b&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh s&#x1EBD; t&#xEC;m hi&#x1EC3;u v&#x1EC1; c&#xE1;ch read variable t&#x1EEB; MCU RAM.</p><h2 id="chu-n-b-">Chu&#x1EA9;n b&#x1ECB;</h2><ul><li>Ph&#x1EA7;n c&#x1EE9;ng STM32F407 kit l&#xE0; &#x111;&#x1ED3; m&#xEC;nh d&#xF9;ng trong b&#xE0;i vi&#x1EBF;t n&#xE0;y</li><li>D&#xE2;y c&#xE1;p</li><li>M&#xF4;i tr&#x1B0;&#x1EDD;ng c&#xE0;i &#x111;&#x1EB7;t</li></ul><p>N&#x1EBF;u m&#x1ECD;i th&#x1EE9; ch&#x1B0;a s&#x1EB5;n s&#xE0;ng m&#x1EDD;i b&#x1EA1;n back v&#x1EC1; l&#x1EA1;i b&#xE0;i vi&#x1EBF;t sau tr&#x1B0;&#x1EDB;c khi ch&#xFA;ng ta b&#x1EAF;t &#x111;&#x1EA7;u</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/gioi-thieu-stm32cubemonitor/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">H&#x1B0;&#x1EDB;ng d&#x1EAB;n s&#x1EED; d&#x1EE5;ng STM32CubeMonitor | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">H&#xF4;m nay trong qu&#xE1; tr&#xEC;nh t&#xEC;m l&#x1EA1;i tool STMStudio th&#xEC; v&#xF4; t&#xEC;nh m&#xEC;nh &#x111;&#xE3; th&#x1EA5;y n&#xF3; &#x111;&#xE3;qu&#xE1; c&#x169; v&#xE0; kh&#xF4;ng c&#xF2;n &#x111;&#x1B0;&#x1EE3;c khuy&#x1EBF;n kh&#xED;ch s&#x1EED; d&#x1EE5;ng n&#x1EEF;a, thay v&#xE0;o &#x111;&#xF3; l&#x1EA1;i l&#xE0; m&#x1ED9;t toolr&#x1EA5;t m&#x1EDB;i nh&#x1B0;ng kh&#xF4;ng h&#x1EC1; xa l&#x1EA1; v&#x1EDB;i ch&#xFA;ng ta. STM32CubeMonitor. Nay chia s&#x1EBB; cho anhem c&#xF9;ng t&#xEC;m hi&#x1EC3;u v&#x1EC1; tool n&#xE0;y xem n&#xF3; ngon l&#xE0;nh nh&#x1B0; th&#x1EBF; n&#xE0;o nh&#xE9;&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">SC</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-feature.png" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM"></div></a></figure><h2 id="vi-t-ch-ng-tr-nh-c-b-n-v-i-stm32cubeide">Vi&#x1EBF;t ch&#x1B0;&#x1A1;ng tr&#xEC;nh c&#x1A1; b&#x1EA3;n v&#x1EDB;i STM32CubeIDE</h2><h3 id="t-o-variable">T&#x1EA1;o variable</h3><p>&#x110;&#x1EC3; c&#xF3; th&#x1EC3; truy c&#x1EAD;p v&#xE0;o bi&#x1EBF;n trong firmware, m&#xEC;nh s&#x1EBD; vi&#x1EBF;t m&#x1ED9;t ch&#x1B0;&#x1A1;ng tr&#xEC;nh c&#x1A1; b&#x1EA3;n define bi&#x1EBF;n <code>basicCounter</code> ki&#x1EC3;u d&#x1EEF; li&#x1EC7;u <code>Unsigned 16-bit</code>, ch&#x1B0;&#x1A1;ng tr&#xEC;nh s&#x1EBD; t&#x103;ng gi&#xE1; tr&#x1ECB; <code>basicCounter</code> 500ms m&#x1ED9;t l&#x1EA7;n</p><pre><code class="language-C">/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t basicCounter = 0;
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_Delay(500);
	  HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
	  basicCounter += 1;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}</code></pre><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-24.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><h3 id="l-y-t-n-bi-n-t-file">L&#x1EA5;y t&#xEA;n bi&#x1EBF;n t&#x1EEB; file</h3><p>Sau khi generate code c&#x169;ng nh&#x1B0; build ho&#xE0;n th&#xE0;nh, ta s&#x1EBD; c&#xF3; file th&#x1EF1;c thi <code>elf</code> nh&#x1B0; h&#xEC;nh d&#x1B0;&#x1EDB;i</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-25.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><!--kg-card-begin: markdown--><blockquote>
<p>V&#x1EDB;i STMCubeIDE ta s&#x1EBD; c&#xF3; file th&#x1EF1;c thi d&#x1EA1;ng elf, tuy nhi&#xEA;n CubeMonitor v&#x1EAB;n support file .out v&#xE0; .axf c&#x1EE7;a keil C n&#xEA;n tho&#x1EA3;i m&#xE1;i con g&#xE0; m&#xE1;i nh&#xE1;<br>
Th&#xEA;m 1 l&#x1B0;u &#xFD; n&#x1EEF;a l&#xE0; sau khi build ae nh&#x1EDB; flash file xu&#x1ED1;ng kit lu&#xF4;n nha</p>
</blockquote>
<!--kg-card-end: markdown--><h2 id="c-u-h-nh-v-i-stm32cubemonitor">C&#x1EA5;u h&#xEC;nh v&#x1EDB;i STM32CubeMonitor</h2><p>Th&#xEA;m m&#x1EDB;i exe-config...</p><ol><li>Click &#x111;&#xF4;i chu&#x1ED9;t v&#xE0;o &#x201C;myVariables&#x201D;, sau &#x111;&#xF3; ch&#x1EC9;nh s&#x1EED;a thu&#x1ED9;c t&#xED;nh c&#x1EE7;a n&#xF3; nh&#x1B0; h&#xEC;nh b&#xEA;n d&#x1B0;&#x1EDB;i</li><li>Click v&#xE0;o bi&#x1EC3;u t&#x1B0;&#x1EE3;ng b&#xFA;t c&#x1EE7;a &#x201C;Executable&quot;</li></ol><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-26.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><p>T&#x1EA1;o exe-config</p><ol><li>&#x110;i&#x1EC1;n t&#xEA;n v&#xE0;o trong config</li><li>&#x110;i&#x1EC1;n &#x201C;Folder&#x201D; m&#xE0; ch&#x1EE9;a file elf file &#x1EDF; &#x111;&#xE2;y l&#xE0; <code>C:\STM32CubeMonitor_Lab01</code></li><li>Ch&#x1ECD;n file elf t&#x1EEB; danh s&#xE1;ch</li><li>Ch&#x1ECD;n Add/Update</li></ol><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-27.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><p>Ch&#x1ECD;n variable trong &#x201C;Variable List&#x201D;</p><ol><li>Ch&#x1ECD;n <code>basicCounter</code></li><li>Click v&#xE0;o &#x201C;Add&#x201D; &#x111;&#x1EC3; th&#xEA;m &#x201C;myVariables&#x201D; v&#xE0;o danh s&#xE1;ch quan s&#xE1;t</li></ol><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-28.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><p>Gi&#x1EDD; th&#xEC; danh s&#xE1;ch variable &#x111;&#xE3; hi&#x1EC3;n th&#x1ECB; th&#xF4;ng tin</p><ul><li>T&#xEA;n: <code>basicCounter</code></li><li>&#x110;&#x1ECB;a ch&#x1EC9;: <code>0x20000028</code></li><li>Ki&#x1EC3;u d&#x1EEF; li&#x1EC7;u: <code>Unsigned 16-bit</code></li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-29.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><h3 id="l-u-v-monitor">L&#x1B0;u v&#xE0; monitor</h3><p>Sau khi ho&#xE0;n th&#xE0;nh c&#xE1;c b&#x1B0;&#x1EDB;c tr&#xEA;n ta c&#x1EA7;n l&#x1B0;u flow l&#x1EA1;i. D&#x1EA5;u ch&#x1EA5;m xanh tr&#xEA;n &#x201C;myVariables&#x201D; ch&#x1EC9; cho ch&#xFA;ng ta bi&#x1EBF;t r&#x1EB1;ng c&#x1EA5;u h&#xEC;nh &#x111;&#xE3; &#x111;&#x1B0;&#x1EE3;c thay &#x111;&#x1ED5;i. Gi&#x1EDD; th&#xEC; click v&#xE0;o &#x201C;Deploy&#x201D; &#x111;&#x1EC3; h&#x1B0;&#x1A1;ng th&#xE0;nh qu&#x1EA3; th&#xF4;i</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-30.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><h3 id="xem-dashboard">Xem dashboard</h3><p>Sau khi c&#xF3; th&#xF4;ng b&#xE1;o &#x201C;Successfully deployed&#x201D; ta c&#xF3; th&#x1EC3; click v&#xE0;o n&#xFA;t Dashboard &#x111;&#x1EC3; quan s&#xE1;t</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-31.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><p>C&#xF3; v&#x1EBB; l&#xE0; c&#xF3; ch&#xFA;t l&#x1ED7;i, do &#x111;&#x1ED5;i t&#xEA;n bi&#x1EBF;n t&#x1EEB; myVarConfig thay cho myVariables n&#xEA;n ta ph&#x1EA3;i c&#xF3; m&#x1ED9;t ch&#xFA;t thay &#x111;&#x1ED5;i &#xA0;nh&#x1B0; sau, sau &#x111;&#xF3; deploy l&#x1EA1;i v&#xE0; quan s&#xE1;t dashboard th&#xF4;i</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-32.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><h3 id="ch-y-acquisition">Ch&#x1EA1;y acquisition</h3><p>Click v&#xE0;o n&#xFA;t &#xA0;&#x201C;START ACQUISITION&#x201D; ta s&#x1EBD; th&#x1EA5;y &#xA0;&#x201C;basicCounter&#x201D; s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c &#x111;&#x1ECD;c tu&#x1EA7;n t&#x1EF1; t&#x1EEB; MCU RAM memory v&#xE0; gi&#xE1; tr&#x1ECB; c&#x1EE7;a n&#xF3; s&#x1EBD; t&#x103;ng d&#x1EA7;n.</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-33.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><p>&#x110;&#x1EC3; d&#x1EEB;ng vi&#x1EC7;c &#x111;&#x1ECD;c b&#x1EA1;n ch&#x1EC9; c&#x1EA7;n click v&#xE0;o n&#xFA;t &#x201C;STOP ACQUISITION&#x201D;</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-34.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><p>&#x110;&#x1EC3; quan s&#xE1;t th&#x1EDD;i gian v&#xE0; gi&#xE1; tr&#x1ECB; &#x111;&#x1B0;&#x1EE3;c hi&#x1EC3;n th&#x1ECB;</p><ul><li>Click v&#xE0;o &#x201C;Show Points&#x201D; checkbox, ta s&#x1EBD; th&#x1EA5;y &quot;basicCounter&quot; &#x111;&#x1B0;&#x1EE3;c t&#x103;ng l&#xEA;n 1 v&#xE0; t&#x103;ng m&#x1ED7;i 500ms nh&#x1B0; trong code ban &#x111;&#x1EA7;u.</li><li>B&#x1EA1;n c&#xF3; th&#x1EC3; s&#x1EED; d&#x1EE5;ng t&#xED;nh n&#x103;ng thu ph&#xF3;ng &#x111;&#x1EC3; c&#xF3; &#x111;&#x1ED9; ch&#xED;nh x&#xE1;c cao h&#x1A1;n. Ta c&#xF3; th&#x1EC3; ch&#x1ECD;n Zoom ho&#x1EB7;c Brush. Trong ch&#x1EBF; &#x111;&#x1ED9; Zoom, ta c&#xF2;n c&#xF3; th&#x1EC3; ph&#xF3;ng to &#x111;&#x1B0;&#x1EDD;ng cong b&#x1EB1;ng c&#xE1;ch s&#x1EED; d&#x1EE5;ng chu&#x1ED9;t &#x111;&#x1EC3; ch&#x1ECD;n m&#x1ED9;t v&#xF9;ng.</li></ul><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-35.png" class="kg-image" alt="STM32CubeMonitor - &#x110;&#x1ECD;c gi&#xE1; tr&#x1ECB; bi&#x1EBF;n t&#x1EEB; RAM" loading="lazy"></figure><blockquote>L&#x1B0;u &#xFD; nh&#x1ECF;: kh&#xF4;ng &#x111;&#x1ED3;ng th&#x1EDD;i s&#x1EED; d&#x1EE5;ng stlink &#x111;&#x1EC3; flash v&#xE0; d&#xF9;ng monitor c&#xF9;ng 1 l&#xFA;c, do &#x111;&#xF3; ch&#x1EC9; s&#x1EED; d&#x1EE5;ng &#x111;&#x1B0;&#x1EE3;c 1 trong 2, n&#x1EBF;u c&#xF3; hi&#x1EC7;n t&#x1B0;&#x1EE3;ng kh&#xF4;ng flash &#x111;&#x1B0;&#x1EE3;c th&#xEC; b&#x1EA1;n ph&#x1EA3;i t&#x1EAF;t STM32CubeMonitor v&#xE0; ng&#x1B0;&#x1EE3;c l&#x1EA1;i.</blockquote><h2 id="k-t">K&#x1EBF;t</h2><p>B&#xE0;i n&#xE0;y &#x111;&#x1A1;n gi&#x1EA3;n nh&#x1EB9; nh&#xE0;ng h&#x1A1;n, b&#x1EA1;n c&#xF3; th&#x1EC3; bi&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c c&#xE1;ch l&#x1EAD;p tr&#xEC;nh STM32 &#x111;&#x1EC3; t&#x1EA1;o ra m&#x1ED9;t bi&#x1EBF;n t&#x103;ng d&#x1EA7;n v&#xE0; &#x111;&#x1ECD;c gi&#xE1; tr&#x1ECB; c&#x1EE7;a bi&#x1EBF;n &#x111;&#xF3; th&#xF4;ng qua STM32CubeMonitor. Chu&#x1EA9;n b&#x1ECB; tinh th&#x1EA7;n ngh&#x1EC9; ng&#x1A1;i &#x111;&#x1EC3; ti&#x1EBF;p t&#x1EE5;c v&#x1EDB;i b&#xE0;i ghi gi&#xE1; tr&#x1ECB; xu&#x1ED1;ng d&#x1B0;&#x1EDB;i variable nh&#xE9;</p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[STM32CubeMonitor - Giới thiệu]]></title><description><![CDATA[STM32CubeMonitor là gì, cách sử dụng nó như thế nào, dùng nó để quan sát, phân tích, hiển thị các giá trị từ MCU lên dashboard và điều khiền qua internet.]]></description><link>https://hocarm.org/gioi-thieu-stm32cubemonitor/</link><guid isPermaLink="false">610ea8a1fb3a257667cca7cc</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Fri, 23 Jul 2021 05:30:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/08/stm32cubemonitor-feature-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://hocarm.org/content/images/2021/08/stm32cubemonitor-feature-1.png" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u"><p>H&#xF4;m nay trong qu&#xE1; tr&#xEC;nh t&#xEC;m l&#x1EA1;i tool &#xA0;STMStudio th&#xEC; v&#xF4; t&#xEC;nh m&#xEC;nh &#x111;&#xE3; th&#x1EA5;y n&#xF3; &#x111;&#xE3; qu&#xE1; c&#x169; v&#xE0; kh&#xF4;ng c&#xF2;n &#x111;&#x1B0;&#x1EE3;c khuy&#x1EBF;n kh&#xED;ch s&#x1EED; d&#x1EE5;ng n&#x1EEF;a, thay v&#xE0;o &#x111;&#xF3; l&#x1EA1;i l&#xE0; m&#x1ED9;t tool r&#x1EA5;t m&#x1EDB;i nh&#x1B0;ng kh&#xF4;ng h&#x1EC1; xa l&#x1EA1; v&#x1EDB;i ch&#xFA;ng ta. STM32CubeMonitor. Nay chia s&#x1EBB; cho anh em c&#xF9;ng t&#xEC;m hi&#x1EC3;u v&#x1EC1; tool n&#xE0;y xem n&#xF3; ngon l&#xE0;nh nh&#x1B0; th&#x1EBF; n&#xE0;o nh&#xE9;</p><h2 id="gi-i-thi-u">Gi&#x1EDB;i thi&#x1EC7;u</h2><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-5.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p><strong><strong><a href="https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-performance-and-debuggers/stm32cubemonitor.html" rel="noreferrer noopener external">STM32CubeMonitor</a></strong></strong> gi&#xFA;p tinh ch&#x1EC9;nh v&#xE0; ch&#x1EA9;n &#x111;o&#xE1;n c&#xE1;c &#x1EE9;ng d&#x1EE5;ng STM32 t&#x1EA1;i th&#x1EDD;i &#x111;i&#x1EC3;m ch&#x1EA1;y b&#x1EB1;ng c&#xE1;ch <strong>&#x111;&#x1ECD;c</strong> v&#xE0; <strong>hi&#x1EC3;n th&#x1ECB;</strong> c&#xE1;c bi&#x1EBF;n c&#x1EE7;a ch&#xFA;ng trong th&#x1EDD;i gian th&#x1EF1;c.<br>STM32CubeMonitor cung c&#x1EA5;p <strong><strong>flow-based graphical editor</strong> </strong>(tr&#xEC;nh ch&#x1EC9;nh s&#x1EED;a &#x111;&#x1ED3; h&#x1ECD;a d&#x1EF1;a tr&#xEA;n lu&#x1ED3;ng) &#x111;&#x1EC3; x&#xE2;y d&#x1EF1;ng <strong>dashboard </strong>(c&#xE1;c trang t&#x1ED5;ng quan) &#xA0;m&#x1ED9;t c&#xE1;ch &#x111;&#x1A1;n gi&#x1EA3;n v&#xE0; nhanh ch&#xF3;ng th&#xEA;m c&#xE1;c giao di&#x1EC7;n nh&#x1B0; nh&#x1B0; &#x111;&#x1ED3;ng h&#x1ED3; &#x111;o, bi&#x1EC3;u &#x111;&#x1ED3; v&#xE0; &#x111;&#x1ED3; th&#x1ECB;.<br>V&#x1EDB;i kh&#x1EA3; n&#x103;ng gi&#xE1;m s&#xE1;t kh&#xF4;ng x&#xE2;m nh&#x1EAD;p, STM32CubeMonitor duy tr&#xEC; ho&#x1EA1;t &#x111;&#x1ED9;ng th&#x1EDD;i gian th&#x1EF1;c c&#x1EE7;a c&#xE1;c &#x1EE9;ng d&#x1EE5;ng v&#xE0; b&#x1ED5; sung ho&#xE0;n h&#x1EA3;o cho c&#xE1;c c&#xF4;ng c&#x1EE5; g&#x1EE1; l&#x1ED7;i truy&#x1EC1;n th&#x1ED1;ng &#x111;&#x1EC3; th&#x1EF1;c hi&#x1EC7;n vi&#x1EC7;c ghi ch&#xE9;p v&#xE0; ph&#xE2;n t&#xED;ch &#x1EE9;ng d&#x1EE5;ng.</p><p>V&#x1EDB;i t&#xED;nh n&#x103;ng <strong><strong>remote monitoring</strong> </strong>(gi&#xE1;m s&#xE1;t t&#x1EEB; xa) v&#xE0; h&#x1ED7; tr&#x1EE3; nhi&#x1EC1;u d&#x1EA1;n hi&#x1EC3;n th&#x1ECB;, STM32CubeMonitor cho ph&#xE9;p ng&#x1B0;&#x1EDD;i d&#xF9;ng gi&#xE1;m s&#xE1;t c&#xE1;c &#x1EE9;ng d&#x1EE5;ng th&#xF4;ng qua m&#x1EA1;ng,<br>ki&#x1EC3;m tra <strong>nhi&#x1EC1;u device &#x111;&#x1ED3;ng th&#x1EDD;i</strong> v&#xE0; tr&#x1EF1;c quan tr&#xEA;n c&#xE1;c thi&#x1EBF;t b&#x1ECB; kh&#xE1;c nhau nh&#x1B0; <strong>PC, m&#xE1;y t&#xED;nh b&#x1EA3;ng</strong> ho&#x1EB7;c <strong>&#x111;i&#x1EC7;n tho&#x1EA1;i di &#x111;&#x1ED9;ng</strong>.<br>H&#x1A1;n n&#x1EEF;a, v&#x1EDB;i s&#x1EF1; h&#x1ED7; tr&#x1EE3; tr&#x1EF1;c ti&#x1EBF;p c&#x1EE7;a c&#x1ED9;ng &#x111;&#x1ED3;ng <strong><strong><a href="https://nodered.org/" rel="noreferrer noopener external">Node-RED&#xAE;</a></strong></strong> , STM32CubeMonitor cho ph&#xE9;p l&#x1EF1;a ch&#x1ECD;n kh&#xF4;ng gi&#x1EDB;i h&#x1EA1;n c&#xE1;c ph&#x1EA7;n m&#x1EDF; r&#x1ED9;ng &#x111;&#x1EC3; gi&#x1EA3;i quy&#x1EBF;t nhi&#x1EC1;u lo&#x1EA1;i &#x1EE9;ng d&#x1EE5;ng kh&#xE1;c nhau.</p><p>Sau khi t&#x1EA3;i v&#x1EC1; v&#xE0; c&#xE0;i &#x111;&#x1EB7;t th&#xEC; kh&#xF4;ng c&#xF2;n nghi ng&#x1EDD; g&#xEC; n&#x1EEF;a, n&#xF3; ch&#xED;nh l&#xE0; base tr&#xEA;n Node-RED &#x111;&#xF3; anh ch&#x1ECB; em &#x1EA1;, n&#x1EBF;u anh ch&#x1ECB; em ch&#x1B0;a bi&#x1EBF;t Node-RED l&#xE0; g&#xEC; th&#xEC; m&#xEC;nh v&#x1EC1; b&#xE0;i vi&#x1EBF;t n&#xE0;y &#x111;&#x1EC3; h&#xF3;ng nh&#xE9;.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/node-red-co-ban/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Node-red c&#x1A1; b&#x1EA3;n | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Node-red n&#xF3; l&#xE0; g&#xEC; ? Node-RED &#x111;&#x1B0;&#x1EE3;c d&#x1EF1;a tr&#xEA;n Node.js, n&#xF3; c&#xF3; th&#x1EC3; &#x111;&#x1B0;&#x1EE3;c xem nh&#x1B0; m&#x1ED9;tweb server m&#xE0; b&#x1EA1;n c&#xF3; th&#x1EC3; c&#x1EA5;u h&#xEC;nh t&#xF9;y ch&#x1EC9;nh c&#xE1;c ch&#x1EE9;c n&#x103;ng g&#x1ECD;i l&#xE0; &#x201C;flow&#x201D; t&#x1EEB; b&#x1EA5;tk&#x1EF3; tr&#xEC;nh duy&#x1EC7;t n&#xE0;o tr&#xEA;n m&#xE1;y t&#xED;nh. M&#x1ED7;i &#x1EE9;ng d&#x1EE5;ng Node-RED bao g&#x1ED3;m c&#xE1;c node c&#xF3; th&#x1EC3;li&#xEA;n k&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c v&#x1EDB;i nhau v&#x1EDB;i c&#xE1;c d&#x1EA1;ng l&#xE0; input, output v&#xE0; operat&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">SC</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2020/04/41.png" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u"></div></a></figure><p>&#x1EDE; b&#xE0;i vi&#x1EBF;t tr&#xEA;n, ph&#x1EA3;i t&#x1ED1;n r&#x1EA5;t nhi&#x1EC1;u c&#xF4;ng s&#x1EE9;c &#x111;&#x1EC3; c&#xE0;i &#x111;&#x1EB7;t Node-RED, &#x111;&#x1EC3; n&#xF3; work v&#x1EDB;i STM32 th&#xEC; ph&#x1EA3;i nhi&#x1EC1;u c&#xF4;ng h&#x1A1;n n&#x1EEF;a, tuy nhi&#xEA;n gi&#x1EDD; &#x111;&#xE3; c&#xF3; STM32CubeMonitor lo h&#x1EBF;t cho ch&#xFA;ng ta r&#x1ED3;i, ch&#x1EC9; vi&#x1EC7;c t&#x1EA3;i v&#x1EC1; v&#xE0; c&#xE0;i &#x111;&#x1EB7;t, sau &#x111;&#xF3; c&#xF3; s&#x1EB5;n IDE &#x111;&#x1EC3; m&#x1ECD;i ng&#x1B0;&#x1EDD;i d&#xF9;ng lu&#xF4;n, qu&#xE1; ti&#x1EC7;n ph&#x1EA3;i kh&#xF4;ng n&#xE0;o.</p><h2 id="t-nh-n-ng">T&#xED;nh n&#x103;ng</h2><p>STM32CubeMonitor c&#xF3; m&#x1ED9;t s&#x1ED1; t&#xED;nh n&#x103;ng ngon l&#xE0;nh m&#xEC;nh xin list ra d&#x1B0;&#x1EDB;i &#x111;&#xE2;y</p><ul><li>Tr&#xEC;nh editor giao di&#x1EC7;n &#x111;&#x1ED3; h&#x1ECD;a k&#xE9;o th&#x1EA3;, kh&#xF4;ng c&#x1EA7;n l&#x1EAD;p tr&#xEC;nh &#x111;&#x1EC3; t&#x1EA1;o dashboard</li><li>K&#x1EBF;t n&#x1ED1;i v&#x1EDB;i STM32 device th&#xF4;ng qua <strong><strong>ST-LINK</strong></strong> (<strong><strong>SWD</strong></strong> ho&#x1EB7;c <strong><strong>JTAG</strong></strong> protocols)</li><li><strong>&#x110;&#x1ECD;c </strong>v&#xE0; <strong>ghi <strong>variable</strong></strong> <strong><strong>on-the-fly</strong></strong> t&#x1EEB; <strong><strong>RAM</strong></strong> trong th&#x1EDD;i gian th&#x1EF1;c khi &#x1EE9;ng d&#x1EE5;ng &#x111;ang ch&#x1EA1;y</li><li>L&#x1EA5;y th&#xF4;ng tin debug t&#x1EEB; file th&#x1EF1;c thi (executable file)</li><li>C&#xF3; 2 mode ho&#x1EA1;t &#x111;&#x1ED9;ng l&#xE0; acquisition mode ho&#x1EB7;c snapshot mode</li><li>Trigger th&#xF4;ng tin t&#x1EAD;p trung v&#xE0;o &#x1EE9;ng d&#x1EE5;ng ho&#x1EB7;c c&#xE1;c h&#xE0;nh vi &#x1B0;a th&#xED;ch</li><li>Cho ph&#xE9;p log data v&#xE0;o file v&#xE0; c&#xF3; th&#x1EC3; xem l&#x1EA1;i ho&#x1EB7;c ph&#xE2;n t&#xED;ch</li><li>Cung c&#x1EA5;p hi&#x1EC3;n th&#x1ECB; c&#xF3; th&#x1EC3; t&#xF9;y ch&#x1EC9;nh bi&#x1EC3;u &#x111;&#x1ED3; v&#x1EDB;i r&#x1EA5;t nhi&#x1EC1;u widget (nh&#x1B0; gauges, bar graphs v&#xE0; plots)</li><li><strong><strong>Multi-probe support</strong> </strong>h&#x1ED7; tr&#x1EE3; monitor nhi&#x1EC1;u target li&#xEA;n ti&#x1EBF;p </li><li>Remote monitoring v&#x1EDB;i nhi&#x1EC1;u d&#x1EA1;ng hi&#x1EC3;n th&#x1ECB; kh&#xE1;c nhau (PCs, tablets, mobile phones)</li><li>H&#x1ED7; tr&#x1EE3; t&#x1EEB; c&#x1ED9;ng &#x111;&#x1ED3;ng <strong><strong><a href="https://nodered.org/" rel="noreferrer noopener external">Node-RED&#xAE;</a></strong></strong> </li><li>H&#x1ED7; tr&#x1EE3; Multi-OS: Windows&#xAE;, Linux&#xAE; Ubuntu&#xAE; and macOS&#xAE;</li></ul><h2 id="c-i-t">C&#xE0;i &#x111;&#x1EB7;t</h2><p>Anh ch&#x1ECB; em c&#xF3; th&#x1EC3; t&#x1EA3;i tool &#x1EDF; &#x111;&#xE2;y <a href="https://www.st.com/en/development-tools/stm32cubemonitor.html">https://www.st.com/en/development-tools/stm32cubemonitor.html</a></p><p>V&#x1EDB;i window sau khi c&#xE0;i &#x111;&#x1EB7;t phi&#xEA;n b&#x1EA3;n STM32CubeMonitor Windows installer xong v&#x1EDB;i c&#xE1;c b&#x1B0;&#x1EDB;c &#x1EA5;n next th&#xEC; ch&#xFA;ng ta s&#x1EBD; c&#xF3; giao di&#x1EC7;n nh&#x1B0; sau</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-7.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><ul><li>[Palette] &#x2013; Danh s&#xE1;ch c&#xE1;c node c&#xF3; s&#x1EB5;n &#x111;&#x1EC3; d&#xF9;ng</li><li>[Workspace] &#x2013; Ch&#x1B0;&#x1A1;ng tr&#xEC;nh d&#x1B0;&#x1EDB;i d&#x1EA1;ng k&#xE9;o th&#x1EA3; v&#xE0; n&#x1ED1;i c&#xE1;c kh&#x1ED1;i v&#x1EDB;i nhau</li><li>[Side bar] &#x2013; Data &amp; error messages gi&#x1EEF;a c&#xE1;c node</li></ul><h2 id="truy-c-p">Truy c&#x1EAD;p</h2><p>V&#x1EDB;i STM32CubeMonitor ta c&#xF3; 2 c&#xE1;ch c&#xF3; th&#x1EC3; truy c&#x1EAD;p l&#x1EA5;y th&#xF4;ng tin t&#x1EEB; board:</p><ul><li>Ch&#x1EA1;y tr&#xEA;n host PC k&#x1EBF;t n&#x1ED1;i v&#x1EDB;i STM32 target</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://hocarm.org/content/images/2021/08/ic-computer-1.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"><figcaption>Local access</figcaption></figure><ul><li>Ch&#x1EA1;y tr&#xEA;n web browser d&#xF9;ng IP address c&#x1EE7;a host PC</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://hocarm.org/content/images/2021/08/ic-computer2.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"><figcaption>Remote access</figcaption></figure><h2 id="basic-flow-ho-t-ng-nh-th-n-o">Basic flow ho&#x1EA1;t &#x111;&#x1ED9;ng nh&#x1B0; th&#x1EBF; n&#xE0;o ?</h2><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-8.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Khi click n&#xFA;t &#x201C;Start Acquisition&#x201D; :</p><p>D&#x1EEF; li&#x1EC7;u &#x111;&#x1B0;&#x1EE3;c g&#x1EED;i &#x111;&#x1EC3; th&#x103;m d&#xF2; v&#xE0; c&#x1EA5;u h&#xEC;nh &#x111;&#x1EA7;u d&#xF2;<br>D&#x1EEF; li&#x1EC7;u &#x111;&#x1B0;&#x1EE3;c nh&#x1EAD;n b&#x1EB1;ng &#x111;&#x1EA7;u d&#xF2; trong v&#xE0; &#x111;&#x1B0;&#x1EE3;c l&#x1ECD;c b&#x1EDF;i n&#xFA;t x&#x1EED; l&#xFD;<br>M&#x1ED7;i th&#xF4;ng b&#xE1;o &#x111;&#x1EA7;u v&#xE0;o &#x111;&#x1EA1;i di&#x1EC7;n cho m&#x1ED9;t ph&#xE9;p &#x111;o c&#x1EE7;a m&#x1ED9;t nh&#xF3;m c&#xE1;c bi&#x1EBF;n, c&#x1EE9; 50 mili gi&#xE2;y cho m&#x1ED9;t th&#xF4;ng b&#xE1;o cho m&#x1ED7;i bi&#x1EBF;n c&#xF3; ch&#x1EE9;a m&#x1ED9;t ho&#x1EB7;c c&#xE1;c k&#xFD; hi&#x1EC7;u ph&#x1EE5; (x v&#xE0; y)<br>N&#xFA;t bi&#x1EC3;u &#x111;&#x1ED3; nh&#x1EAD;n &#x111;&#x1B0;&#x1EE3;c nh&#x1EEF;ng th&#xF4;ng b&#xE1;o n&#xE0;y v&#xE0; hi&#x1EC3;n th&#x1ECB; n&#xF3; trong b&#x1EA3;ng &#x111;i&#x1EC1;u khi&#x1EC3;n d&#x1EEF; li&#x1EC7;u</p><ol><li>Data s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c g&#x1EED;i t&#x1EDB;i probe out v&#xE0; c&#x1EA5;u h&#xEC;nh probe</li><li>Data &#x111;&#x1B0;&#x1EE3;c nh&#x1EAD;n b&#x1EDF;i probe in v&#xE0; filter (l&#x1ECD;c) b&#x1EDF;i processing node</li><li>V&#x1EDB;i m&#x1ED7;i input message &#x111;&#x1EA1;i di&#x1EC7;n cho m&#x1ED9;t ph&#xE9;p &#x111;o ch&#x1EE9;a nh&#xF3;m c&#xE1;c bi&#x1EBF;n, c&#x1EE9; 50 ms cho m&#x1ED9;t message</li><li>Chart node nh&#x1EAD;n messages v&#xE0; hi&#x1EC3;n th&#x1ECB; data l&#xEA;n dashboard</li></ol><h3 id="design-nodes">Design nodes</h3><p>N&#xF3;i qua m&#x1ED9;t ch&#xFA;t v&#x1EC1; &#xFD; ngh&#x129;a c&#x1EE7;a c&#xE1;c node &#x111;&#x1EC3; m&#x1ECD;i ng&#x1B0;&#x1EDD;i c&#xF3; th&#x1EC3; l&#xE0;m quen. Nh&#x1EEF;ng node n&#xE0;y &#x111;&#x1B0;&#x1EE3;c d&#xF9;ng &#x111;&#x1EC3; t&#x1EA1;o ra c&#xE1;c flow t&#x1EEB; target t&#x1EDB;i variable, render nh&#x1EEF;ng th&#x1EE9; n&#xE0;y tr&#xEA;n dashboard view. T&#x1EA5;t nhi&#xEA;n l&#xE0; nh&#x1EEF;ng th&#x1EE9; n&#xE0;y kh&#xF4;ng c&#xF3; hi&#x1EC3;n th&#x1ECB; l&#xEA;n dashboard. N&#xF3; gi&#x1ED1;ng nh&#x1B0; l&#xE0; ph&#x1EA7;n backend khi b&#x1EA1;n dev web &#x111;&#xF3;.</p><p><strong>Acquisition out</strong></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-9.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Node n&#xE0;y cho ph&#xE9;p ng&#x1B0;&#x1EDD;i d&#xF9;ng t&#x1EF1; define v&#xE0; l&#x1EF1;a ch&#x1ECD;n probe config (probe name, protocol v&#xE0; frequency). Nhi&#x1EC7;m v&#x1EE5; ch&#xED;nh c&#x1EE7;a n&#xF3; l&#xE0; m&#x1EDF; v&#xE0; &#x111;&#xF3;ng connection, v&#xE0; g&#x1EED;i c&#xE1;c command qua probe.</p><p><strong>Acquisition in</strong></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-10.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Node n&#xE0;y t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; acquisition out. Kh&#xE1;c bi&#x1EC7;t l&#xE0; n&#xF3; nh&#x1EAD;n data t&#x1EEB; probe m&#xE0; ch&#xFA;ng ta l&#x1EF1;a ch&#x1ECD;n. Ngo&#xE0;i ra n&#xF3; &#x111;&#x1B0;&#x1EE3;c design &#x111;&#x1EC3; c&#xF3; th&#x1EC3; link v&#x1EDB;i m&#x1ED9;t ho&#x1EB7;c nhi&#x1EC1;u node kh&#xE1;c .</p><p><strong>Variables</strong></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-11.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Node n&#xE0;y cho ph&#xE9;p m&#x1ED9;t nh&#xF3;m bi&#x1EBF;n &#x111;&#x1B0;&#x1EE3;c c&#x1EA5;u h&#xEC;nh &#x111;&#x1EC3; ch&#x1EE9;a m&#x1ED9;t t&#x1EAD;p h&#x1EE3;p c&#xE1;c bi&#x1EBF;n v&#xE0; m&#x1ED9;t v&#xE0;i tham s&#x1ED1; b&#x1ED5; sung r&#x1EA5;t h&#x1EEF;u &#xED;ch cho vi&#x1EC7;c giao ti&#x1EBF;p v&#x1EDB;i target</p><p><strong>Processing</strong></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-12.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>&#x110;i&#x1EC1;u n&#xE0;y bi&#x1EBF;n &#x111;&#x1ED5;i m&#x1ED7;i message input v&#xE0;o &#x111;&#x1EA1;i di&#x1EC7;n cho m&#x1ED9;t ph&#xE9;p &#x111;o c&#x1EE7;a m&#x1ED9;t nh&#xF3;m bi&#x1EBF;n th&#xE0;nh m&#x1ED9;t message c&#x1EE9; sau 50 ms cho m&#x1ED7;i bi&#x1EBF;n. Message &#xA0;ch&#x1EE9;a m&#x1ED9;t ho&#x1EB7;c nhi&#x1EC1;u (x v&#xE0; y). C&#x169;ng c&#xF3; th&#x1EC3; x&#xE1;c &#x111;&#x1ECB;nh c&#xE1;c bi&#x1EC3;u th&#x1EE9;c v&#xE0; th&#x1ED1;ng k&#xEA; d&#x1EF1;a tr&#xEA;n c&#xE1;c ph&#xE9;p &#x111;o v&#xE0; c&#xE1;c t&#xF9;y ch&#x1ECD;n nh&#x1EAD;t k&#xFD; ri&#xEA;ng l&#x1EBB;. Node n&#xE0;y cho ph&#xE9;p l&#x1ECD;c d&#x1EEF; li&#x1EC7;u t&#x1EEB; probe, cho m&#x1ED7;i nh&#xF3;m bi&#x1EBF;n.</p><h3 id="dashboard-nodes">Dashboard nodes</h3><p><strong>Chart</strong></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-14.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>N&#xFA;t n&#xE0;y cho ph&#xE9;p c&#xE1;c gi&#xE1; tr&#x1ECB; &#x111;&#x1EA7;u v&#xE0;o &#x111;&#x1B0;&#x1EE3;c v&#x1EBD; tr&#xEA;n bi&#x1EC3;u &#x111;&#x1ED3;. N&#xF3; c&#xF3; th&#x1EC3; l&#xE0; bi&#x1EC3;u &#x111;&#x1ED3; d&#x1EA1;ng line ho&#x1EB7;c bi&#x1EC3;u &#x111;&#x1ED3; d&#x1EA1;ng bar.</p><p><strong>Write panel</strong></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-13.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Node n&#xE0;y cho ph&#xE9;p b&#x1EA1;n c&#xF3; th&#x1EC3; v&#x1EBD; th&#xEA;m widget v&#xE0;o dashboard.</p><h2 id="v-d-">V&#xED; d&#x1EE5;</h2><p>N&#xF3;i nhi&#x1EC1;u l&#xFD; thuy&#x1EBF;t qu&#xE1; ch&#x1EAF;c anh ch&#x1ECB; em c&#x169;ng h&#x1A1;i ch&#xE1;n, gi&#x1EDD; m&#xEC;nh v&#xE0;o lu&#xF4;n v&#xED; d&#x1EE5; c&#x1EE5; th&#x1EC3; cho d&#x1EC5; h&#xEC;nh dung nha m&#x1ECD;i ng&#x1B0;&#x1EDD;i</p><h3 id="v-d-1">V&#xED; d&#x1EE5; 1</h3><p>Trong v&#xED; d&#x1EE5; n&#xE0;y m&#xEC;nh s&#x1EBD; s&#x1EED; d&#x1EE5;ng flow m&#x1EB7;c &#x111;&#x1ECB;nh c&#x1EE7;a STM32CubeMonitor. Monitor 1 bi&#x1EBF;n t&#x1EF1; t&#x1EA1;o &#x111;&#x1EC3; ki&#x1EC3;m tra flow ho&#x1EA1;t &#x111;&#x1ED9;ng hay kh&#xF4;ng</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-15.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>&#x110;&#x1EA7;u ti&#xEA;n ta ch&#x1ECD;n v&#xE0;o myVariables nh&#x1B0; h&#xEC;nh tr&#xEA;n, Add custom variable l&#xE0; <code>Var</code> v&#x1EDB;i &#x111;&#x1ECB;a ch&#x1EC9; <code>0x00000000</code>, ki&#x1EC3;u d&#x1EEF; li&#x1EC7;u uint8, bi&#x1EBF;n n&#xE0;y t&#x1EF1; t&#x1EA1;o v&#xE0; kh&#xF4;ng c&#xF3; li&#xEA;n quan t&#x1EDB;i target, do &#x111;&#xF3; gi&#xE1; tr&#x1ECB; n&#xF3; s&#x1EBD; kh&#xF4;ng c&#xF3; thay &#x111;&#x1ED5;i g&#xEC;. L&#x1B0;u l&#x1EA1;i b&#x1EB1;ng c&#xE1;ch ch&#x1ECD;n Done</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-16.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Sau &#x111;&#xF3; l&#xE0; c&#x1EA5;u h&#xEC;nh cho probe_Out, n&#x1EBF;u l&#x1EA7;n &#x111;&#x1EA7;u th&#xEC; b&#x1EA1;n c&#x1EA7;n &#x1EA5;n v&#xE0;o add new probe v&#xE0; bi&#x1EC3;u t&#x1B0;&#x1EE3;ng b&#xFA;t ch&#xEC;, ti&#x1EBF;p t&#x1EE5;c ch&#x1ECD;n ST-Link v&#xE0; Add, sau &#x111;&#xF3; &#x1EA5;n Done &#x111;&#x1EC3; ho&#xE0;n th&#xE0;nh</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-17.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>T&#x1B0;&#x1A1;ng t&#x1EF1; v&#x1EDB;i Probe_In, l&#x1EA7;n n&#xE0;y th&#xEC; c&#xF3; ST-Link s&#x1EB5;n trong list r&#x1ED3;i ch&#x1EC9; vi&#x1EC7;c l&#x1EF1;a ch&#x1ECD;n v&#xE0; Done th&#xF4;i</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-18.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Cu&#x1ED1;i c&#xF9;ng l&#xE0; deploy v&#xE0; xem k&#x1EBF;t qu&#x1EA3;, n&#x1EBF;u b&#x1EA1;n th&#x1EA5;y Sucessfull v&#xE0; p2p connect v&#x1EDB;i STM32F4xxx ngh&#x129;a l&#xE0; b&#x1EA1;n &#x111;&#xE3; c&#x1EA5;u h&#xEC;nh th&#xE0;nh c&#xF4;ng.</p><blockquote>L&#x1B0;u &#xFD; nh&#x1ECF;: &#x1EDF; &#x111;&#xE2;y m&#xEC;nh d&#xF9;ng board STM32F407 Discovery &#x111;&#x1EC3; demo, v&#x1EDB;i c&#xE1;c board kh&#xE1;c c&#x169;ng s&#x1EBD; ho&#x1EA1;t &#x111;&#x1ED9;ng t&#x1B0;&#x1A1;ng t&#x1EF1; nha m&#x1ECD;i ng&#x1B0;&#x1EDD;i</blockquote><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-19.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Sau &#x111;&#xF3; ta ki&#x1EC3;m tra dashboard ho&#x1EA1;t &#x111;&#x1ED9;ng nh&#x1B0; th&#x1EBF; n&#xE0;o, b&#x1EA1;n c&#xF3; th&#x1EC3; th&#x1EA5;y bi&#x1EBF;n <code>Var</code> c&#x1EE7;a m&#xEC;nh hi&#x1EC3;n th&#x1ECB; gi&#xE1; tr&#x1ECB; l&#xEA;n bi&#x1EC3;u &#x111;&#x1ED3; nh&#x1B0; th&#x1EBF; n&#xE0;o sau khi &#x1EA5;n v&#xE0;o n&#xFA;t Start Acquisition r&#x1ED3;i, mu&#x1ED1;n d&#x1EEB;ng l&#x1EA1;i th&#xEC; b&#x1EA1;n c&#xF3; th&#x1EC3; &#x1EA5;n Stop v&#xE0; Clear &#x111;&#x1EC3; x&#xF3;a th&#xF4;ng tin</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-20.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><h3 id="v-d-2">V&#xED; d&#x1EE5; 2</h3><p>V&#xED; d&#x1EE5; 1 ch&#x1EC9; c&#x1A1; b&#x1EA3;n l&#xE0; th&#x1EED; dashboard xem c&#xF3; hi&#x1EC3;n th&#x1ECB; &#x111;&#x1B0;&#x1EE3;c g&#xEC; hay kh&#xF4;ng th&#xF4;i. Gi&#x1EDD; l&#xE0; hi&#x1EC3;n th&#x1ECB; variable th&#x1EAD;t t&#x1EEB; ADC, l&#x1EA5;y lu&#xF4;n m&#x1ED9;t &#x111;o&#x1EA1;n code c&#xF3; s&#x1EB5;n c&#x1EE7;a STM32F4</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/master/06_ADC_basic"><div class="kg-bookmark-content"><div class="kg-bookmark-title">STM32F4-Discovery-Tutorial/06_ADC_basic at master &#xB7; hocarm/STM32F4-Discovery-Tutorial</div><div class="kg-bookmark-description">C&#xE1;c v&#xED; d&#x1EE5; l&#x1EAD;p tr&#xEC;nh STM32F4 Discovery d&#xF9;ng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">hocarm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/10598c3c51c50473357d7c772c0aad0413453a014033418837cd40580022bd12/hocarm/STM32F4-Discovery-Tutorial" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u"></div></a></figure><p>M&#xEC;nh d&#xF9;ng code n&#xE0;y build v&#xE0; n&#x1EA1;p cho kit.</p><p>V&#x1EAB;n t&#x1EAD;n d&#x1EE5;ng v&#xED; d&#x1EE5; 1, gi&#x1EDD; m&#xEC;nh s&#x1EED;a l&#x1EA1;i myVariables l&#x1EA1;i, ch&#x1ED7; executable ch&#x1ECD;n v&#xE0;o bi&#x1EC3;u t&#x1B0;&#x1EE3;ng b&#xFA;t ch&#xEC; tr&#x1ECF; t&#x1EDB;i folder ADC &#x111;&#xE3; build tr&#x1B0;&#x1EDB;c &#x111;&#xF3;</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-21.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-22.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><p>Xong ph&#x1EA7;n c&#x1EA5;u h&#xEC;nh gi&#x1EDD; l&#xE0; deploy v&#xE0; v&#xE0;o dashboard start th&#xF4;i, b&#x1EA1;n &#x111;&#xE3; th&#x1EA5;y value ADC &#x111;&#x1B0;&#x1EE3;c g&#x1EED;i l&#xEA;n t&#x1EEB; kit r&#x1ED3;i &#x111;&#x1EA5;y. Ngon l&#xE0;nh r&#x1ED3;i nh&#xE9;</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-23.png" class="kg-image" alt="STM32CubeMonitor - Gi&#x1EDB;i thi&#x1EC7;u" loading="lazy"></figure><h2 id="k-t">K&#x1EBF;t</h2><p>B&#xE0;i vi&#x1EBF;t n&#xE0;y &#x111;&#xE3; gi&#x1EDB;i thi&#x1EC7;u cho c&#xE1;c b&#x1EA1;n v&#x1EC1; c&#xF4;ng c&#x1EE5; m&#x1EDB;i &#x111;&#x1EC3; monitor m&#x1ECD;i th&#x1EE9; trong kit STM32, v&#x1EDB;i STM32CubeMonitor ta c&#xF3; th&#x1EC3; l&#xE0;m &#x111;&#x1B0;&#x1EE3;c r&#x1EA5;t nhi&#x1EC1;u th&#x1EE9; hay ho nh&#x1B0; quan s&#xE1;t gi&#xE1; tr&#x1ECB;, th&#x1EAD;m ch&#xED; monitor c&#x169;ng nh&#x1B0; ph&#xE2;n t&#xED;ch c&#xE1;c gi&#xE1; tr&#x1ECB; &#x111;o &#x111;&#xF3;. H&#x1EB9;n g&#x1EB7;p c&#xE1;c b&#x1EA1;n &#x1EDF; b&#xE0;i ti&#x1EBF;p theo.</p><p>Tham kh&#x1EA3;o</p><p>[<a href="https://www.st.com/en/development-tools/stm32cubemonitor.html">1</a>][<a href="http://www.emcu.eu/stm32cubemonitor/">2</a>]</p>]]></content:encoded></item><item><title><![CDATA[Hướng dẫn cài đặt STM32CubeIDE trên MAC OS]]></title><description><![CDATA[Hướng dẫn cài đặt STM32CubeIDE trên MAC OS, tích hợp CubeMX và editor lên một phần mềm duy nhất, STM32CubeIDE là gì và cách cài đặt nó trên MAC]]></description><link>https://hocarm.org/huong-dan-cai-dat-stm32-cube-ide-tren-mac-os/</link><guid isPermaLink="false">610c03f72280ac5c2e529dee</guid><category><![CDATA[STM32]]></category><dc:creator><![CDATA[KT]]></dc:creator><pubDate>Fri, 16 Jul 2021 10:58:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/08/stm32cubeide-macos-feature.png" medium="image"/><content:encoded><![CDATA[<img src="https://hocarm.org/content/images/2021/08/stm32cubeide-macos-feature.png" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS"><p>Hi&#x1EC7;n t&#x1EA1;i th&#xEC; do nhu c&#x1EA7;u m&#xEC;nh mu&#x1ED1;n dev STM32 tr&#xEA;n MAC OS, tuy nhi&#xEA;n kh&#xF4;ng t&#xEC;m ra &#x111;&#x1B0;&#x1EE3;c c&#xE1;ch &#x111;&#x1EC3; c&#xF3; th&#x1EC3; x&#x1EED; l&#xFD; &#x111;&#x1B0;&#x1EE3;c vi&#x1EC7;c n&#xE0;y. Sau m&#x1ED9;t h&#x1ED3;i t&#xEC;m ki&#x1EBF;m th&#xEC; &#x111;&#xE3; bi&#x1EBF;t v&#xE0; xin share l&#x1EA1;i cho c&#xE1;c b&#x1EA1;n khi c&#xF3; nhu c&#x1EA7;u c&#x1EA7;n d&#xF9;ng t&#x1EDB;i.</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image.png" class="kg-image" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS" loading="lazy"></figure><p>Vi&#x1EC7;c c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n window v&#xE0; linux kh&#xE1; &#x111;&#x1A1;n gi&#x1EA3;n, tuy nhi&#xEA;n n&#x1EBF;u b&#x1EA1;n l&#xE0; ng&#x1B0;&#x1EDD;i m&#x1EDB;i d&#xF9;ng MAC th&#xEC; s&#x1EBD; g&#x1EB7;p hi&#x1EC7;n t&#x1B0;&#x1EE3;ng c&#xE0;i m&#xE3;i kh&#xF4;ng &#x111;&#x1B0;&#x1EE3;c. Kh&#xE1; l&#xE0; &#x1EE9;c ch&#x1EBF;. Tr&#x1B0;&#x1EDB;c khi c&#xE0;i &#x111;&#x1EB7;t th&#xEC; t&#xEC;m hi&#x1EC3;u qua 1 ch&#xFA;t v&#x1EC1; STM32CubeIDE nh&#xE9; m&#x1ECD;i ng&#x1B0;&#x1EDD;i</p><h2 id="stm32cubeide-l-g-">STM32CubeIDE l&#xE0; g&#xEC; ?</h2><p>STM32CubeIDE l&#xE0; m&#x1ED9;t m&#xF4;i tr&#x1B0;&#x1EDD;ng ph&#xE1;t tri&#x1EC3;n all-in-one, l&#xE0; m&#x1ED9;t ph&#x1EA7;n c&#x1EE7;a h&#x1EC7; sinh th&#xE1;i ph&#x1EA7;n m&#x1EC1;m STM32Cube, &#xFD; t&#x1B0;&#x1EDF;ng c&#x1EE7;a STM32Cube l&#xE0; n&#xF3; bao g&#x1ED3;m nhi&#x1EC1;u &#x201C;Kh&#x1ED1;i&#x201D; (Cube), ch&#x1EB3;ng h&#x1EA1;n nh&#x1B0; c&#x1EA5;u h&#xEC;nh ngo&#x1EA1;i vi, t&#x1EA1;o m&#xE3;, bi&#xEA;n d&#x1ECB;ch m&#xE3; v&#xE0; g&#x1EE1; l&#x1ED7;i, vv, &#x111;&#x1EC3; t&#x1EA1;o th&#xE0;nh m&#x1ED9;t kh&#x1ED1;i l&#x1EDB;n h&#x1A1;n, n&#x1EBF;u b&#x1EA1;n bi&#x1EBF;t c&#xE1;ch ho&#x1EA1;t &#x111;&#x1ED9;ng c&#x1EE7;a m&#x1ED7;i kh&#x1ED1;i, th&#xEC; b&#x1EA1;n s&#x1EBD; c&#xF3; m&#x1ED9;t m&#xF4;i tr&#x1B0;&#x1EDD;ng ph&#xE1;t tri&#x1EC3;n &#x111;&#x1EA7;y s&#x1EE9;c m&#x1EA1;nh theo &#xFD; c&#x1EE7;a m&#xEC;nh. &#x110;i&#x1EC1;u n&#xE0;y &#x111;&#x1B0;&#x1EE3;c gi&#x1EA3; &#x111;&#x1ECB;nh r&#x1EB1;ng b&#x1EA1;n bi&#x1EBF;t r&#xF5; t&#x1EEB;ng ph&#x1EA7;n, nh&#x1B0;ng n&#x1EBF;u b&#x1EA1;n ch&#x1B0;a quen v&#x1EDB;i m&#xF4;i tr&#x1B0;&#x1EDD;ng ph&#xE1;t tri&#x1EC3;n v&#xE0; chu&#x1ED7;i c&#xF4;ng c&#x1EE5; c&#x1EE7;a ST, b&#x1EA1;n c&#xF3; th&#x1EC3; g&#x1EB7;p m&#x1ED9;t kh&#x1ED1;i Rubik l&#x1ED9;n x&#x1ED9;n v&#xE0; b&#x1EA1;n s&#x1EBD; kh&#xF4;ng bi&#x1EBF;t b&#x1EAF;t &#x111;&#x1EA7;u t&#x1EEB; &#x111;&#xE2;u &#x111;&#x1EC3; gi&#x1EA3;i kh&#x1ED1;i Rubik n&#xE0;y.</p><p>N&#xF3;i n&#xF4;m na th&#xEC; STM32CubeIDE l&#xE0; m&#x1ED9;t IDE t&#x1B0;&#x1A1;ng &#x111;&#x1ED1;i m&#x1EDB;i v&#xE0; d&#x1EF1;a tr&#xEA;n Eclipse v&#xE0; CDT (C/C ++ Development Tools) framework, c&#x1ED9;ng v&#x1EDB;i GCC toolchains v&#xE0; GDB &#x111;&#x1EC3; g&#x1EE1; l&#x1ED7;i. STM32CubeIDE t&#xED;ch h&#x1EE3;p c&#x1EA5;u h&#xEC;nh STM32 v&#xE0; c&#xE1;c ch&#x1EE9;c n&#x103;ng t&#x1EA1;o d&#x1EF1; &#xE1;n t&#x1EEB; STM32CubeMX tr&#x1B0;&#x1EDB;c &#x111;&#xE2;y v&#xE0; editor t&#x1EEB; Atollic TrueStudio (t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; System Workbench) m&#xE0; ST &#x111;&#xE3; mua l&#x1EA1;i v&#xE0;o n&#x103;m 2018. &#x110;&#xFA;ng l&#xE0; c&#xE1; l&#x1EDB;n nu&#x1ED1;t c&#xE1; b&#xE9; m&#xE0;.</p><p>Tr&#x1B0;&#x1EDB;c n&#x103;m 2019, n&#x1EBF;u b&#x1EA1;n &#x111;ang develop STM32, th&#xEC; ST s&#x1EED; d&#x1EE5;ng t&#x1EA5;t c&#x1EA3; c&#xE1;c lo&#x1EA1;i m&#xF4;i tr&#x1B0;&#x1EDD;ng ph&#xE1;t tri&#x1EC3;n v&#x1EDB;i nhi&#x1EC1;u lo&#x1EA1;i IDE kh&#xE1;c nhau, b&#x1EA1;n s&#x1EBD; th&#x1EA5;y r&#x1EB1;ng &#x111;&#xF4;i khi h&#x1ECD; s&#x1EED; d&#x1EE5;ng mbed, Keil, System Workbench ho&#x1EB7;c Atollic TrueStudio trong c&#xE1;c h&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#x1EE7;a h&#x1ECD; tr&#xEA;n website, v&#xEC; v&#x1EAD;y Internet &#x111;&#xE3; c&#xF3; qu&#xE1; nhi&#x1EC1;u h&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#x169; ho&#x1EB7;c c&#xF3; h&#x1B0;&#x1EDB;ng d&#x1EAB;n nh&#x1B0;ng kh&#xF4;ng c&#xF3; g&#xEC; nhi&#x1EC1;u v&#x1EDB;i th&#x1EB1;ng STM32CubeIDE n&#xE0;y. V&#x1EC1; ph&#x1B0;&#x1A1;ng di&#x1EC7;n c&#xE1; nh&#xE2;n m&#xEC;nh th&#xEC; r&#x1EA5;t gh&#xE9;t nh&#x1EEF;ng th&#x1EE9; li&#xEA;n quan t&#x1EDB;i Eclipse v&#xEC; n&#xF3; qu&#xE1; n&#x1EB7;ng, tuy nhi&#xEA;n kh&#xF4;ng th&#x1EC3; ph&#x1EE7; nh&#x1EAD;n r&#x1EB1;ng n&#xF3; r&#x1EA5;t h&#x1EEF;u d&#x1EE5;ng &#x111;&#x1ED1;i v&#x1EDB;i nh&#x1EEF;ng ng&#x1B0;&#x1EDD;i m&#x1EDB;i b&#x1EAF;t &#x111;&#x1EA7;u m&#xE0; kh&#xF4;ng c&#x1EA7;n ph&#x1EA3;i c&#xE0;i qu&#xE1; nhi&#x1EC1;u th&#x1EE9; c&#x169;ng nh&#x1B0; c&#x1EA5;u h&#xEC;nh l&#x1EB1;ng nh&#x1EB1;ng &#x111;&#x1EC3; c&#xF3; th&#x1EC3; code &#x111;&#x1B0;&#x1EE3;c m&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE5; th&#x1EC3;.</p><h2 id="c-i-t-stm32cubeide">C&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE</h2><p>M&#x1EB7;c d&#xF9; STM32CubeIDE l&#xE0; mi&#x1EC5;n ph&#xED;, nh&#x1B0;ng ST mu&#x1ED1;n b&#x1EA1;n truy c&#x1EAD;p trang web c&#x1EE7;a h&#x1ECD;, &#x111;&#x103;ng k&#xFD; email &#x111;&#x1EC3; t&#x1EA3;i n&#xF3;, b&#x1EA1;n c&#xF3; th&#x1EC3; t&#x1EA3;i &#x1EDF; link sau &#x111;&#xE2;y <a href="https://www.st.com/en/development-tools/stm32cubeide.html">https://www.st.com/en/development-tools/stm32cubeide.html</a>, ch&#x1ECD;n phi&#xEA;n b&#x1EA3;n t&#x1B0;&#x1A1;ng th&#xED;ch v&#x1EDB;i h&#x1EC7; &#x111;i&#x1EC1;u h&#xE0;nh c&#x1EE7;a b&#x1EA1;n. Vi&#x1EC7;c &#x111;&#x103;ng k&#xFD; n&#xE0;y tuy c&#xF3; h&#x1A1;i t&#x1ED1;n s&#x1EE9;c t&#xED; nh&#x1B0;ng kh&#xF4;ng sao, c&#xF3; nhi&#x1EC1;u t&#xE0;i li&#x1EC7;u c&#x169;ng y&#xEA;u c&#x1EA7;u &#x111;&#x103;ng k&#xFD; v&#xE0; &#x111;&#x103;ng nh&#x1EAD;p &#x111;&#x1EC3; c&#xF3; th&#x1EC3; t&#x1EA3;i &#x111;&#x1B0;&#x1EE3;c.</p><p>STM32CubeIDE v&#x1EC1; c&#x1A1; b&#x1EA3;n l&#xE0; &#x1EE9;ng d&#x1EE5;ng d&#x1EF1;a tr&#xEA;n Java (nh&#x1B0; Eclipse), v&#xEC; v&#x1EAD;y n&#xF3; c&#xF3; th&#x1EC3; ch&#x1EA1;y tr&#xEA;n c&#xE1;c n&#x1EC1;n t&#x1EA3;ng Windows, MacOS v&#xE0; Linux. V&#x1EDB;i tr&#x1B0;&#x1EDD;ng h&#x1EE3;p m&#xEC;nh &#x111;ang b&#xED; ch&#x1ED7; MacOS, v&#xEC; v&#x1EAD;y c&#xE1;c quy tr&#xEC;nh c&#xE0;i &#x111;&#x1EB7;t trong b&#xE0;i vi&#x1EBF;t n&#xE0;y s&#x1EBD; d&#x1EF1;a tr&#xEA;n MacOS (t&#x1B0;&#x1A1;ng t&#x1EF1; v&#x1EDB;i Linux).</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-1.png" class="kg-image" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS" loading="lazy"></figure><p>Sau khi t&#x1EA3;i v&#x1EC1; v&#xE0; gi&#x1EA3;i n&#xE9;n ra s&#x1EBD; c&#xF3; m&#x1ED9;t file , st-stm32cubeide_xxx.dmg nh&#x1B0; phi&#xEA;n b&#x1EA3;n hi&#x1EC7;n t&#x1EA1;i. B&#x1EA1;n c&#x1EA7;n c&#xE0;i &#x111;&#x1EB7;t theo 2 b&#x1B0;&#x1EDB;c sau.</p><p>B&#x1B0;&#x1EDB;c 1: C&#xE0;i &#x111;&#x1EB7;t ST-LINK server</p><p>&#x110;&#x1EC3; b&#x1EA1;n c&#xF3; th&#x1EC3; n&#x1EA1;p &#x111;&#x1B0;&#x1EE3;c file bin v&#xE0;o trong chip th&#xEC; c&#x1EA7;n ph&#x1EA3;i c&#xE0;i ST-Link Server, b&#x1EA1;n c&#xF3; th&#x1EC3; th&#x1EA5;y h&#xEC;nh d&#x1B0;&#x1EDB;i n&#xF3; s&#x1EBD; c&#xF3; th&#xF4;ng b&#xE1;o install me 1st, n&#x1EBF;u l&#x1EE1; qu&#xEA;n th&#xEC; b&#x1EA1;n c&#xF3; th&#x1EC3; t&#x1EA3;i n&#xF3; v&#x1EDB;i link sau</p><!--kg-card-begin: markdown--><p><a href="https://www.st.com/en/development-tools/st-link-server.html">https://www.st.com/en/development-tools/st-link-server.html</a></p>
<!--kg-card-end: markdown--><p></p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-2.png" class="kg-image" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS" loading="lazy"></figure><p>B&#x1B0;&#x1EDB;c 2 ch&#x1EC9;nh setting, b&#x1B0;&#x1EDB;c n&#xE0;y quan tr&#x1ECD;ng, do b&#xEA;n MACOS c&#xF3; m&#x1EA5;y software kh&#xF4;ng &#x111;&#x1B0;&#x1EE3;c trust(kh&#xF4;ng &#x111;&#x1B0;&#x1EE3;c c&#xE0;i t&#x1EEB; appstore) l&#xE0; kh&#x1ECF;i ch&#x1EA1;y, m&#xEC;nh ko r&#xE0;nh c&#xE1;i n&#xE0;y l&#x1EAF;m n&#xEA;n m&#xF2; m&#xE3;i m&#x1EDB;i ra.</p><p>M&#x1EDF; <strong><strong>System Preferences -&gt; Security&amp; Privacy</strong></strong>, ch&#x1ECD;n v&#xE0;o bi&#x1EC3;u t&#x1B0;&#x1A1;ng &#x1ED5; kh&#xF3;a &#x111;&#x1EC3; cho ph&#xE9;p c&#xE0;i &#x111;&#x1EB7;t st-stlink-server.</p><figure class="kg-card kg-image-card"><img src="https://hocarm.org/content/images/2021/08/image-3.png" class="kg-image" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS" loading="lazy"></figure><p>Sau &#x111;&#xF3; c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE, b&#x1EA1;n ch&#x1EC9; c&#x1EA7;n k&#xE9;o v&#xE0; th&#x1EA3; bi&#x1EC3;u t&#x1B0;&#x1EE3;ng IDE v&#xE0;o th&#x1B0; m&#x1EE5;c &#x1EE8;ng d&#x1EE5;ng &#x111;&#x1EC3; ho&#xE0;n t&#x1EA5;t qu&#xE1; tr&#xEC;nh c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE. N&#x1EBF;u b&#x1EA1;n ch&#x1EA1;y STM32CubeIDE ngay b&#xE2;y gi&#x1EDD;, b&#x1EA1;n s&#x1EBD; g&#x1EB7;p l&#x1ED7;i th&#xF4;ng b&#xE1;o r&#x1EB1;ng STM32CubeIDE b&#x1ECB; h&#x1ECF;ng v&#xE0; kh&#xF4;ng th&#x1EC3; m&#x1EDF; &#x111;&#x1B0;&#x1EE3;c. Th&#x1EF1;c ra kh&#xF4;ng c&#xF3; g&#xEC; sai v&#x1EDB;i STM32CubeIDE, ch&#x1EC9; l&#xE0; MacOS &#x111;&#x1B0;a &#x1EE9;ng d&#x1EE5;ng v&#xE0;o tr&#x1EA1;ng th&#xE1;i c&#xE1;ch ly, gi&#x1ED1;ng nh&#x1B0; tr&#x1B0;&#x1EDD;ng h&#x1EE3;p &#x1EDF; tr&#xEA;n v&#x1EDB;i ST-LINK Server v&#xEC; &#x1EE9;ng d&#x1EE5;ng &#x111;&#x1B0;&#x1EE3;c t&#x1EA3;i xu&#x1ED1;ng t&#x1EEB; Internet thay v&#xEC; qua Apple App Store.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://hocarm.org/content/images/2021/08/image-4.png" class="kg-image" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS" loading="lazy"><figcaption><em>MacOS quarantine on STM32CubeIDE</em></figcaption></figure><p>B&#x1EA1;n c&#xF3; th&#x1EC3; ch&#x1EA1;y l&#x1EC7;nh sau &#x111;&#x1EC3; &#x111;&#x1B0;a STM32CubeIDE kh&#x1ECF;i tr&#x1EA1;ng th&#xE1;i c&#xE1;ch ly covid 19</p><pre><code class="language-bash">sudo xattr -dr com.apple.quarantine /Applications/STM32CubeIDE.app/</code></pre><p>Khi STM32CubeIDE &#x111;ang ch&#x1EA1;y l&#x1EA7;n &#x111;&#x1EA7;u ti&#xEA;n, n&#xF3; y&#xEA;u c&#x1EA7;u t&#x1EA1;o kh&#xF4;ng gian l&#xE0;m vi&#x1EC7;c, theo m&#x1EB7;c &#x111;&#x1ECB;nh, n&#xF3; &#x111;&#x1EC1; xu&#x1EA5;t t&#x1EA1;o kh&#xF4;ng gian l&#xE0;m vi&#x1EC7;c t&#x1EA1;i <code>~/STM32CubeIDE/workspace_1.x.x</code>, n&#xF3; c&#x169;ng t&#x1EA1;o th&#x1B0; m&#x1EE5;c <code>STM32Cube</code> chi&#x1EBF;m 300MB + b&#x1ED9; nh&#x1EDB; &#x111;&#x1EC3; l&#x1B0;u tr&#x1EEF; t&#x1EA5;t c&#x1EA3; firmware, middleware v&#xE0; libraries m&#xE0; b&#x1EA1;n s&#x1EBD; c&#x1EA7;n &#x111;&#x1EC3; ph&#xE1;t tri&#x1EC3;n STM32. N&#xF3;i chung, b&#x1EA1;n kh&#xF4;ng c&#x1EA7;n ph&#x1EA3;i l&#xE0;m b&#x1EA5;t c&#x1EE9; th&#x1EE9; g&#xEC; ho&#x1EB7;c t&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i th&#x1B0; m&#x1EE5;c <code>STM32Cube</code>, nh&#x1B0;ng t&#xF4;i khuy&#xEA;n b&#x1EA1;n n&#xEA;n v&#xE0;o trong c&#xE1;c <code>th&#x1B0; m&#x1EE5;c</code> v&#xE0; &#x111;&#x1ECD;c file pdf trong &#x201C;Getting started with STM32Cube IDE&#x201D;.</p><p>N&#x1EBF;u b&#x1EA1;n &#x111;&#xE3; quen v&#x1EDB;i m&#xF4;i tr&#x1B0;&#x1EDD;ng ph&#xE1;t tri&#x1EC3;n Eclipse, b&#x1EA1;n s&#x1EBD; th&#x1EA5;y STM32CubeIDE ch&#x1EB3;ng kh&#xE1;c g&#xEC;, r&#x1EA5;t quen thu&#x1ED9;c v&#xE0; d&#x1EC5; s&#x1EED; d&#x1EE5;ng. N&#x1EBF;u b&#x1EA1;n ch&#x1B0;a quen v&#x1EDB;i m&#xF4;i tr&#x1B0;&#x1EDD;ng ph&#xE1;t tri&#x1EC3;n d&#x1EF1;a tr&#xEA;n Eclipse, c&#xF3; th&#x1EC3; m&#x1EA5;t m&#x1EA5;y ch&#x1EE5;c ph&#xFA;t &#x111;&#x1EC3; l&#xE0;m quen v&#x1EDB;i n&#xF3; v&#xE0; s&#x1EBD; c&#xF3; m&#x1ED9;t s&#x1ED1; ki&#x1EBF;n th&#x1EE9;c c&#x1A1; b&#x1EA3;n c&#x1EA7;n ph&#x1EA3;i bi&#x1EBF;t, quan tr&#x1ECD;ng nh&#x1EA5;t l&#xE0; b&#x1EA1;n d&#xE1;m m&#xF2; m&#x1EAB;m, th&#x1EBF; th&#xF4;i.</p><p>C&#xF3; t&#xE0;i li&#x1EC7;u <a href="https://www.st.com/resource/en/user_manual/dm00629856-stm32cubeide-user-guide-stmicroelectronics.pdf" rel="nofollow noopener noreferrer">UM2609 STM32CubeIDE User Manual</a>, ngo&#xE0;i ra ST c&#xF2;n c&#xF3; serie YouTube <a href="https://www.youtube.com/playlist?list=PLnMKNibPkDnFCosVVv98U5dCulE6T3Iy8" rel="nofollow noopener noreferrer">STM33CubeIDE basics</a> &#x111;&#x1EC3; ch&#xFA;ng ta c&#xF3; th&#x1EC3; tham kh&#x1EA3;o, b&#x1EA1;n c&#xF3; th&#x1EC3; xem n&#xF3; &#x111;&#x1EC3; bi&#x1EBF;t th&#xEA;m m&#x1ED9;t s&#x1ED1; t&#x1EEB; ti&#x1EBF;ng anh chuy&#xEA;n ng&#xE0;nh, c&#x169;ng nh&#x1B0; luy&#x1EC7;n th&#xEA;m skill ti&#x1EBF;ng anh cho m&#xEC;nh, kh&#xE1; &#x111;&#x1A1;n gi&#x1EA3;n v&#xE0; d&#x1EC5; nghe, ch&#x1EC9; c&#xF3; nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m l&#xE0; nh&#x1EEF;ng kit tr&#xEA;n hi&#x1EC7;n kh&#xF4;ng s&#x1EB5;n c&#xF3; cho m&#xEC;nh n&#xEA;n m&#xEC;nh ch&#x1EC9; xem hi&#x1EC3;u c&#xE1;ch l&#xE0;m c&#x1EE7;a h&#x1ECD; th&#xF4;i, m&#xEC;nh ngh&#x129; n&#xF3; r&#x1EA5;t h&#x1EEF;u &#xED;ch &#x111;&#x1EC3; b&#x1EAF;t &#x111;&#x1EA7;u v&#x1EDB;i HAL library v&#xE0; c&#x1EA5;u h&#xEC;nh Peripheral.</p><p>Trong tr&#x1B0;&#x1EDD;ng h&#x1EE3;p b&#xEC;nh th&#x1B0;&#x1EDD;ng, nh&#x1EEF;ng g&#xEC; &#x111;&#x1B0;&#x1EE3;c m&#xF4; t&#x1EA3; &#x1EDF; tr&#xEA;n l&#xE0; &#x111;&#x1EE7; &#x111;&#x1EC3; b&#x1EA1;n b&#x1EAF;t &#x111;&#x1EA7;u v&#xE0; cung c&#x1EA5;p cho b&#x1EA1;n nh&#x1EEF;ng g&#xEC; b&#x1EA1;n c&#x1EA7;n &#x111;&#x1EC3; dev STM32. Tuy nhi&#xEA;n, s&#x1EBD; c&#xF3; l&#xFA;c MCU ho&#x1EB7;c board (v&#xED; d&#x1EE5;: ST Discovery Board ho&#x1EB7;c Nucleo Board) m&#xE0; b&#x1EA1;n &#x111;ang d&#xF9;ng c&#x1EA7;n c&#xF3; y&#xEA;u c&#x1EA7;u m&#x1ED9;t s&#x1ED1; ph&#x1EA7;n m&#x1EC1;m trung gian(middleware) ho&#x1EB7;c g&#xF3;i m&#x1EDF; r&#x1ED9;ng, khi &#x111;&#xF3; b&#x1EA1;n s&#x1EBD; c&#x1EA7;n c&#xE0;i &#x111;&#x1EB7;t ho&#x1EB7;c import g&#xF3;i m&#x1EDF; r&#x1ED9;ng &#x111;&#xF3;. V&#xED; d&#x1EE5; b&#x1EA1;n khi b&#x1EA1;n s&#x1EED; d&#x1EE5;ng b&#x1ED9; STM32 LoRa Discovery th&#xEC; ki&#x1EC3;u g&#xEC; m&#xE0; ch&#x1EB3;ng d&#xED;nh.(b&#x1ED9; n&#xE0;y m&#xEC;nh c&#x169;ng ko c&#xF3; n&#xEA;n t&#x1EA1;m b&#x1ECF; qua nh&#xE1;)</p><h2 id="k-t">K&#x1EBF;t</h2><p>V&#x1EAD;y l&#xE0; c&#xE1;c b&#x1EA1;n c&#xF3; th&#x1EC3; c&#xE0;i &#x111;&#x1B0;&#x1EE3;c m&#xF4;i tr&#x1B0;&#x1EDD;ng development STM32 tr&#xEA;n MAC OS r&#x1ED3;i, gi&#x1EDD; th&#xEC; c&#xE1;c b&#x1EA1;n c&#xF3; th&#x1EC3; dev v&#xE0;i &#x111;&#x1B0;&#x1EDD;ng c&#x1A1; b&#x1EA3;n &#x111;&#x1EC3; ki&#x1EC3;m tra ph&#x1EA7;n m&#x1EC1;m, c&#xE1;c ch&#x1EE9;c n&#x103;ng build, flash v&#xE0; ki&#x1EC3;m tra th&#xE0;nh qu&#x1EA3; ban &#x111;&#x1EA7;u th&#xF4;i.</p><p>M&#x1ECD;i ng&#x1B0;&#x1EDD;i c&#xF3; th&#x1EC3; tham kh&#x1EA3;o b&#xE0;i vi&#x1EBF;t d&#x1B0;&#x1EDB;i &#x111;&#xE2;y c&#x1EE7;a m&#xEC;nh</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/huong-dan-stm32cubeide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">H&#x1B0;&#x1EDB;ng d&#x1EAB;n s&#x1EED; d&#x1EE5;ng STM32CubeIDE | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Sau khi l&#xE0;m k&#x1EBF; ho&#x1EA1;ch th&#xE2;u t&#xF3;m anh TrueSTUDIO v&#xE0; AC6 SW[/lap-trinh-stm32-tren-linux-voi-systemworkbench/] th&#xEC; anh ST th&#x1EA5;y c&#xF3; v&#x1EBB; nh&#x1B0;nhi&#x1EC1;u tool qu&#xE1;, kh&#xE1;ch h&#xE0;ng ng&#x1B0;&#x1EDD;i d&#xF9;ng c&#x169;ng ch&#xF3;ng m&#x1EB7;t, IDE th&#xEC; l&#x1EAF;m m&#xE0; AC6 th&#xEC;tu&#x1ED5;i g&#xEC; s&#xE1;nh &#x111;&#x1B0;&#x1EE3;c v&#x1EDB;i TrueSTUDIO, th&#xEA;m v&#xE0;o n&#x1EEF;a con h&#xE0;ng CubeMX th&#x1A1;m ngon b&#xE9;o b&#x1EDF;gen code nh&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">SC</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2020/04/3.png" alt="H&#x1B0;&#x1EDB;ng d&#x1EAB;n c&#xE0;i &#x111;&#x1EB7;t STM32CubeIDE tr&#xEA;n MAC OS"></div></a></figure><p>C&#xE1;c t&#xE0;i li&#x1EC7;u h&#x1EEF;u &#xED;ch t&#x1EEB; ST bonus cho m&#x1ECD;i ng&#x1B0;&#x1EDD;i tham kh&#x1EA3;o</p><p><a href="https://www.st.com/content/ccc/resource/technical/document/user_manual/group1/16/4b/a4/de/9d/4a/41/44/DM00598966/files/DM00598966.pdf/jcr:content/translations/en.DM00598966.pdf" rel="nofollow noopener noreferrer">User Manual &#x2013; UM2609 STM32CubeIDE User Manual</a><br><a href="https://www.st.com/resource/en/user_manual/dm00300436-stm32-lora-expansion-package-for-stm32cube-stmicroelectronics.pdf" rel="nofollow noopener noreferrer">User Manual &#x2013; UM2073 STM32 LoRa Expansion Package for STM32Cube</a><br><a href="https://www.st.com/resource/en/user_manual/dm00329995-discovery-kit-for-lorawan-sigfox-and-lpwan-protocols-with-stm32l0-stmicroelectronics.pdf" rel="nofollow noopener noreferrer">User Manual &#x2013; UM2115 Discovery kit for LoRaWAN, Sigfox, and LPWAN protocols with STM32L0</a><br><a href="https://www.st.com/content/ccc/resource/technical/document/application_note/group0/db/8c/4f/5a/95/9e/40/69/DM00346311/files/DM00346311.pdf/jcr:content/translations/en.DM00346311.pdf" rel="nofollow noopener noreferrer">Application Note &#x2013; AN4967 Examples of AT commands on I-CUBE-LRWAN</a></p><p>Tham kh&#x1EA3;o</p><p>[<a href="https://www.e-tinkers.com/2021/01/how-to-install-stm32cubeide-on-mac-and-stm32-lora-discovery-kit/">1</a>]</p>]]></content:encoded></item><item><title><![CDATA[Học Micropython cơ bản]]></title><description><![CDATA[Tổng hợp series học micropython cơ bản, cài đặt môi trường và lập trình GPIO, PWM, I2C,UART, SPI, so sánh Micropython với Arduino và hướng phát triển dự án]]></description><link>https://hocarm.org/hoc-micropython-co-ban/</link><guid isPermaLink="false">610654cc2280ac5c2e529ccf</guid><category><![CDATA[MicroPython]]></category><category><![CDATA[New Update]]></category><dc:creator><![CDATA[ChuBim]]></dc:creator><pubDate>Tue, 06 Jul 2021 08:52:00 GMT</pubDate><media:content url="https://hocarm.org/content/images/2021/08/micropython-tutorial.png" medium="image"/><content:encoded><![CDATA[<img src="https://hocarm.org/content/images/2021/08/micropython-tutorial.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"><p>Hello anh em, l&#x1EA1;i l&#xE0; m&#xEC;nh &#x111;&#xE2;y, sau khi ho&#xE0;n th&#xE0;nh serie micropython th&#xEC; &#x111;&#xE2;y s&#x1EBD; l&#xE0; b&#xE0;i t&#x1ED5;ng h&#x1EE3;p c&#x1EE7;a m&#xEC;nh t&#xF3;m g&#x1ECD;n nh&#x1EB9; nh&#xE0;ng t&#xEC;nh c&#x1EA3;m l&#x1EA1;i cho anh em c&#xF3; th&#x1EC3; theo d&#xF5;i.</p><p>Micropython v&#x1EC1; c&#x1A1; b&#x1EA3;n l&#xE0; d&#x1EC5;, d&#x1EC5; hi&#x1EC3;u d&#x1EC5; &#x111;&#x1ECD;c, d&#x1EC5; l&#xE0;m, nhanh g&#x1ECD;n l&#x1EB9; v&#xE0; c&#xF3; th&#x1EC3; n&#xF3;i l&#xE0; gi&#x1ED1;ng m&#xEC; &#x103;n li&#x1EC1;n nh&#x1B0; Arduino. T&#xF9;y m&#x1ED7;i ng&#x1B0;&#x1EDD;i m&#x1ED9;t m&#x1EE5;c &#x111;&#xED;ch kh&#xE1;c nhau, 1 nhu c&#x1EA7;u kh&#xE1;c nhau c&#x169;ng nh&#x1B0; kh&#x1EA9;u v&#x1ECB; ri&#xEA;ng. N&#x1EBF;u b&#x1EA1;n th&#x1EF1;c s&#x1EF1; mu&#x1ED1;n th&#x1EED; nghi&#x1EC7;m python tr&#xEA;n device c&#x169;ng nh&#x1B0; microcontroller th&#xEC; &#x111;&#xE2;y l&#xE0; series d&#xE0;nh cho b&#x1EA1;n. M&#xEC;nh tin v&#x1EDB;i 15-30p xem qua c&#x169;ng nh&#x1B0; c&#xF3; ki&#x1EBF;n th&#x1EE9;c c&#x1A1; b&#x1EA3;n v&#x1EC1; python r&#x1ED3;i th&#xEC; d&#x103;m ba c&#xE1;i n&#xE0;y ch&#x1EC9; l&#xE0; mu&#x1ED7;i th&#xF4;i.</p><p>&#x110;&#xFA;ng v&#x1EDB;i tinh th&#x1EA7;n b&#xE0;i t&#x1ED5;ng h&#x1EE3;p &#x111;&#x1EC3; &#x111;i theo &#x111;&#x1B0;&#x1EE3;c series n&#xE0;y th&#xEC; b&#x1EA1;n c&#x1EA7;n chu&#x1EA9;n b&#x1ECB; 1 ch&#xFA;t nh&#x1EEF;ng th&#x1EE9; sau</p><h2 id="ph-n-c-ng-v-m-i-tr-ng">Ph&#x1EA7;n c&#x1EE9;ng v&#xE0; m&#xF4;i tr&#x1B0;&#x1EDD;ng</h2><ul><li>Board NodeMCU ESP32 ho&#x1EB7;c ESP8266 c&#xF3; n&#x1EA1;p firmware Micropython b&#x1EA3;n m&#x1EDB;i nh&#x1EA5;t</li><li>PC v&#x1EDB;i h&#x1EC7; &#x111;i&#x1EC1;u h&#xE0;nh Windows ho&#x1EB7;c Ubuntu linux, ho&#x1EB7;c c&#x1EA3; 2, trong series n&#xE0;y m&#xEC;nh d&#xF9;ng c&#x1EA3; 2, th&#x1B0;&#x1EDD;ng th&#xEC; Ubuntu &#x111;&#x1EC3; x&#xE0;i esptool flash x&#xF3;a tr&#x1EAF;ng v&#xE0; n&#x1EA1;p firmware cho nhanh g&#x1ECD;n l&#x1EB9;, sau khi &#x111;&#xE3; n&#x1EA1;p xong Micropython th&#xEC; m&#xEC;nh l&#x1EA1;i v&#x1EC1; windows cho quen thu&#x1ED9;c</li></ul><p>C&#xE1;c b&#x1EA1;n c&#xF3; th&#x1EC3; tham kh&#x1EA3;o 2 b&#xE0;i vi&#x1EBF;t sau &#x111;&#xE2;y v&#x1EC1; l&#xE0;m quen c&#x1A1; b&#x1EA3;n c&#x169;ng nh&#x1B0; setup m&#xF4;i tr&#x1B0;&#x1EDD;ng ban &#x111;&#x1EA7;u cho Micropython</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/micropython-va-esp8266/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">MicroPython v&#xE0; ESP8266 | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Micropython v&#xE0; ESP8266 c&#xF3; li&#xEA;n quan g&#xEC; v&#x1EDB;i nhau? Python c&#xF3; th&#x1EC3; ch&#x1EA1;y &#x111;&#x1B0;&#x1EE3;c tr&#xEA;nc&#xE1;c ph&#x1EA7;n c&#x1EE9;ng nh&#xFA;ng &#x111;&#x1B0;&#x1EE3;c kh&#xF4;ng ? H&#x1EB3;n l&#xE0; c&#xE1;c b&#x1EA1;n c&#xF3; nghe n&#xF3;i nhi&#x1EC1;u v&#x1EC1;Micropython, tuy nhi&#xEA;n &#x111;&#x1EC3; ch&#x1EA1;y th&#x1EED; &#x111;&#x1B0;&#x1EE3;c micropython th&#xEC; c&#x169;ng h&#x1A1;i v&#x1EA5;t v&#x1EA3;, m&#xEC;nhxin chia s&#x1EBB; v&#x1EDB;i c&#xE1;c b&#x1EA1;n 1 s&#x1ED1; c&#xE1;ch &#x111;&#x1A1;n gi&#x1EA3;n &#x111;&#x1EC3; c&#xF3; th&#x1EC3; ch&#x1EA1;y v&#xE0; th&#x1EED; micropytho&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">SC</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2020/04/9.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/micropython-voi-webrepl/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Micropython v&#x1EDB;i WebREPL | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Hello anh em, m&#x1EDD;i ae quay v&#x1EC1; nh&#x1EEF;ng n&#x103;m v&#x1EC1; tr&#x1B0;&#x1EDB;c v&#x1EDB;i series h&#x1ECD;c t&#x1EAD;p, b&#x1EAF;t &#x111;&#x1EA7;u l&#x1EA1;iv&#x1EDB;i serie micropython &#x111;&#x1EC3; kh&#x1EDF;i &#x111;&#x1ED9;ng cho n&#xF3;ng ng&#x1B0;&#x1EDD;i. MicroPython v&#xE0; ESP8266 | H&#x1ECD;c ARMMicropython v&#xE0; ESP8266 c&#xF3; li&#xEA;n quan g&#xEC; v&#x1EDB;inhau?Python c&#xF3; th&#x1EC3; ch&#x1EA1;y &#x111;&#x1B0;&#x1EE3;c tr&#xEA;nc&#xE1;c ph&#x1EA7;n c&#x1EE9;ng nh&#xFA;ng &#x111;&#x1B0;&#x1EE3;c kh&#xF4;ng ? H&#x1EB3;n l&#xE0; c&#xE1;c b&#x1EA1;n c&#xF3; nghe n&#xF3;&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/07/micropython-env-feature.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"></div></a></figure><h2 id="ph-n-m-m">Ph&#x1EA7;n m&#x1EC1;m</h2><blockquote>C&#xF3; y&#xEA;u c&#x1EA7;u nh&#x1ECF; tr&#x1B0;&#x1EDB;c khi b&#x1EAF;t &#x111;&#x1EA7;u l&#xE0; b&#x1EA1;n ph&#x1EA3;i bi&#x1EBF;t python c&#x1A1; b&#x1EA3;n nh&#xE9;, n&#x1EBF;u kh&#xF4;ng th&#xEC; c&#x169;ng kh&#xF4;ng sao, m&#xEC;nh s&#x1EBD; c&#xF3; kh&#xF3;a python easy cho ae theo d&#xF5;i ngay, python r&#x1EA5;t &#x111;&#x1A1;n gi&#x1EA3;n d&#x1EC5; hi&#x1EC3;u cho nh&#x1EEF;ng ng&#x1B0;&#x1EDD;i m&#x1EDB;i b&#x1EAF;t &#x111;&#x1EA7;u n&#xEA;n anh em c&#x169;ng kh&#xF4;ng c&#x1EA7;n ph&#x1EA3;i qu&#xE1; lo l&#x1EAF;ng</blockquote><p>Sau khi chu&#x1EA9;n b&#x1ECB; &#x111;&#x1EA7;y &#x111;&#x1EE7; m&#xF4;i tr&#x1B0;&#x1EDD;ng c&#x1EA7;n thi&#x1EBF;t th&#xEC; b&#x1EA1;n c&#xF3; th&#x1EC3; b&#x1EAF;t tay v&#xE0;o nghi&#xEA;n c&#x1EE9;u c&#xE1;c ngo&#x1EA1;i vi kh&#xE1;c nhau, c&#xE1;ch &#x111;&#x1EC3; k&#x1EBF;t n&#x1ED1;i v&#x1EDB;i c&#xE1;c board kh&#xE1;c, &#x111;i&#x1EC1;u khi&#x1EC3;n IO, DHT22, ADC,PWM, giao ti&#x1EBF;p I2C, SPI, UART th&#xF4;ng qua c&#xE1;c b&#xE0;i vi&#x1EBF;t sau</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/micropython-va-gpio/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Micropython &#x111;i&#x1EC1;u khi&#x1EC3;n GPIO | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Trong b&#xE0;i tr&#x1B0;&#x1EDB;c ch&#xFA;ng ta &#x111;&#xE3; bi&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c c&#xE1;ch &#x111;&#x1EC3; setup m&#xF4;i tr&#x1B0;&#x1EDD;ng l&#x1EAD;p tr&#xEC;nhmicropython r&#x1ED3;i, gi&#x1EDD; ch&#xFA;ng ta th&#x1EED; l&#x1EAD;p tr&#xEC;nh GPIO c&#x1A1; b&#x1EA3;n v&#x1EDB;i micropython xem th&#x1EBF;n&#xE0;o N&#x1EBF;u c&#xE1;c b&#x1EA1;n &#x111;&#xE3; l&#x1EE1; b&#x1ECF; qua b&#xE0;i &#x111;&#x1EA7;u ti&#xEA;n trong series micropython th&#xEC; c&#xF3; th&#x1EC3; quayl&#x1EA1;i b&#xE0;i vi&#x1EBF;t sau Micropython v&#x1EDB;i WebREPL | H&#x1ECD;c ARMHello anh em&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/07/micropython-gpio-feature.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/micropython-voi-analog-input-va-pwm/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Micropython v&#x1EDB;i Analog IO | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">V&#x1EAD;y l&#xE0; ta &#x111;&#xE3; &#x111;i &#x111;&#x1B0;&#x1EE3;c t&#x1EDB;i b&#xE0;i vi&#x1EBF;t th&#x1EE9; 3 trong chu&#x1ED7;i series Micropython th&#x1EA7;nth&#xE1;nh. 2 b&#xE0;i vi&#x1EBF;t tr&#x1B0;&#x1EDB;c m&#xEC;nh &#x111;&#xE3; n&#xF3;i v&#x1EC1; vi&#x1EC7;c setup m&#xF4;i tr&#x1B0;&#x1EDD;ng v&#xE0; d&#xF9;ng WebREPL &#x111;&#x1EC3;l&#x1EAD;p tr&#xEC;nh micropython, gi&#x1EDD; th&#xEC; ch&#xFA;ng ta s&#x1EBD; ti&#x1EBF;p t&#x1EE5;c v&#x1EDB;i Analog I/O Micropython v&#x1EDB;i WebREPL | H&#x1ECD;c ARMHello anh em, l&#xE2;u l&#x1EAF;m r&#x1ED3;i m&#x1EDB;i l&#x1EA1;i v&#x1EC1; l&#x1EA1;ise&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/07/micropython-analogio-feature.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/micropython-voi-dht22/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Micropython v&#x1EDB;i DHT22 | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Sau 3 b&#xE0;i v&#x1EDB;i micropython c&#xE1;c b&#x1EA1;n &#x111;&#xE3; th&#x1EA5;y c&#xF3; h&#x1EE9;ng th&#xFA; g&#xEC; v&#x1EDB;i m&#xF3;n n&#xE0;y ch&#x1B0;a ? Nayth&#xEC; m&#xEC;nh ti&#x1EBF;p t&#x1EE5;c v&#x1EDB;i DHT22 quen thu&#x1ED9;c, ta s&#x1EBD; l&#xE0;m m&#x1ED9;t &#x111;o&#x1EA1;n code python &#x111;&#x1EC3; l&#x1EA5;yth&#xF4;ng tin t&#x1EEB; DHT, &#x111;&#xE2;y l&#xE0; modul nhi&#x1EC7;t &#x111;&#x1ED9; v&#xE0; &#x111;&#x1ED9; &#x1EA9;m. Tr&#x1B0;&#x1EDB;c khi b&#x1EAF;t &#x111;&#x1EA7;u l&#xE0; 5p qu&#x1EA3;ng c&#xE1;o cho c&#xE1;c b&#xE0;i vi&#x1EBF;t c&#xF9;ng series n&#x1EBF;u b&#x1EA1;n &#x111;ang c&#x1EA3;mth&#x1EA5;y b&#x1ED1;i r&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/08/micropython-dht22-feature.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://hocarm.org/micropython-voi-i2c-spi-uart/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Micropython v&#x1EDB;i UART/SPI/I2C | H&#x1ECD;c ARM</div><div class="kg-bookmark-description">Micropython, micropython, &#xF4;i l&#xE0;m xong serie n&#xE0;y ch&#x1EAF;c &#xE1;m &#x1EA3;nh micropython lu&#xF4;n qu&#xE1;anh em, b&#xE0;i cu&#x1ED1;i r&#x1ED3;i nh&#xE9;, h&#x1EBF;t b&#xE0;i n&#xE0;y l&#xE0; kh&#xF4;ng c&#xF2;n &#x111;&#x1B0;&#x1EE3;c nghi&#xEA;n c&#x1EE9;u micropythonn&#x1EEF;a &#x111;&#xE2;u. Quay l&#x1EA1;i l&#xFA;c b&#x1EAF;t &#x111;&#x1EA7;u, series n&#xE0;y g&#x1ED3;m 4 b&#xE0;i &#x111;&#xE3; cho ra m&#x1EAF;t v&#xE0; &#x111;&#xE2;y l&#xE0; b&#xE0;i ch&#x1ED1;t h&#x1EA1;,anh em n&#x1EBF;u l&#x1EE1; b&#x1ECF; s&#xF3;t th&#xEC; c&#xF3; th&#x1EC3; quay l&#x1EA1;i &#x111;&#x1EC3; xem t&#x1EA1;&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://hocarm.org/favicon.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"><span class="kg-bookmark-author">H&#x1ECD;c ARM</span><span class="kg-bookmark-publisher">ChuBim</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://hocarm.org/content/images/2021/08/micropython-uart-spi-i2c-feature.png" alt="H&#x1ECD;c Micropython c&#x1A1; b&#x1EA3;n"></div></a></figure><p>V&#x1EDB;i nh&#x1EEF;ng b&#xE0;i vi&#x1EBF;t tr&#xEA;n b&#x1EA1;n c&#xF3; th&#x1EC3; hi&#x1EC3;u &#x111;&#x1B0;&#x1EE3;c c&#xE1;ch l&#xE0;m vi&#x1EC7;c c&#x1EE7;a Micropython, c&#xE1;ch &#x111;&#x1EC3; thao t&#xE1;c v&#x1EDB;i c&#xE1;c ngo&#x1EA1;i vi th&#xF4;ng qua c&#xE1;c th&#x1B0; vi&#x1EC7;n, c&#xE1;ch &#x111;&#x1B0;a file v&#xE0;o Micropython board v&#xE0; &#x111;i&#x1EC1;u khi&#x1EC3;n n&#xF3; &#x111;&#x1EC3; t&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i c&#xE1;c board kh&#xE1;c. &#x1AF;u &#x111;i&#x1EC3;m l&#x1EDB;n nh&#x1EA5;t c&#x1EE7;a n&#xF3; l&#xE0; kh&#xF4;ng c&#x1EA7;n ph&#x1EA3;i bi&#xEA;n d&#x1ECB;ch code, load file py v&#xE0;o v&#xE0; ch&#x1EA1;y lu&#xF4;n.</p><h2 id="-u-i-m-micropython">&#x1AF;u &#x111;i&#x1EC3;m Micropython</h2><p>Ti&#x1EC7;n &#x111;&#xE2;y th&#xEC; &#xA0;c&#xF3; c&#xE1;c &#x1B0;u &#x111;i&#x1EC3;m c&#x1EE7;a micropython m&#xEC;nh list theo <a href="https://www.digikey.ee/en/maker/projects/micropython-basics-what-is-micropython/1f60afd88e6b44c0beb0784063f664fc">b&#xE0;i vi&#x1EBF;t n&#xE0;y</a> ra cho ae xem lu&#xF4;n:</p><ul><li><strong>Interactive REPL, or read-evaluate-print loop</strong>: Cho ph&#xE9;p b&#x1EA1;n k&#x1EBF;t n&#x1ED1;i v&#x1EDB;i m&#x1ED9;t bo m&#x1EA1;ch v&#xE0; &#x111;&#x1EC3; n&#xF3; th&#x1EF1;c thi m&#xE3; m&#xE0; kh&#xF4;ng c&#x1EA7;n bi&#xEA;n d&#x1ECB;ch ho&#x1EB7;c t&#x1EA3;i l&#xEA;n - qu&#xE1; ho&#xE0;n h&#x1EA3;o &#x111;&#x1EC3; nhanh ch&#xF3;ng t&#xEC;m hi&#x1EC3;u v&#xE0; th&#x1EED; nghi&#x1EC7;m v&#x1EDB;i ph&#x1EA7;n c&#x1EE9;ng!</li><li><strong>Extensive software library</strong>: Gi&#x1ED1;ng nh&#x1B0; ng&#xF4;n ng&#x1EEF; l&#x1EAD;p tr&#xEC;nh Python b&#xEC;nh th&#x1B0;&#x1EDD;ng, MicroPython c&#xF3; c&#xE1;c th&#x1B0; vi&#x1EC7;n &#x111;&#x1B0;&#x1EE3;c t&#xED;ch h&#x1EE3;p &#x111;&#x1EC3; h&#x1ED7; tr&#x1EE3; nhi&#x1EC1;u t&#xE1;c v&#x1EE5;. V&#xED; d&#x1EE5;: parsing JSON file t&#x1EEB; web service, t&#xEC;m ki&#x1EBF;m v&#x103;n b&#x1EA3;n b&#x1EB1;ng regular expression ho&#x1EB7;c th&#x1EAD;m ch&#xED; th&#x1EF1;c hi&#x1EC7;n l&#x1EAD;p tr&#xEC;nh socket d&#x1EC5; d&#xE0;ng v&#x1EDB;i c&#xE1;c th&#x1B0; vi&#x1EC7;n t&#xED;ch h&#x1EE3;p s&#x1EB5;n cho MicroPython.</li><li><strong>Extensibility</strong>. &#x110;&#x1ED1;i v&#x1EDB;i ng&#x1B0;&#x1EDD;i d&#xF9;ng cao c&#x1EA5;p, MicroPython c&#xF3; th&#x1EC3; m&#x1EDF; r&#x1ED9;ng v&#x1EDB;i c&#xE1;c function low-level c&#x1EE7;a C/C ++ &#x111;&#x1EC3; b&#x1EA1;n c&#xF3; th&#x1EC3; tr&#x1ED9;n code v&#x1EDB;i code high-level MicroPython khi b&#x1EA1;n c&#x1EA7;n.</li></ul><h2 id="micropython-c-th-l-m-c-g-">Micropython c&#xF3; th&#x1EC3; l&#xE0;m &#x111;&#x1B0;&#x1EE3;c g&#xEC; ?</h2><p>B&#x1EA1;n c&#xF3; th&#x1EC3; t&#x1B0;&#x1EDF;ng t&#x1B0;&#x1EE3;ng b&#x1EA5;t k&#x1EF3; th&#x1EE9; g&#xEC; m&#xE0; Arduino Board l&#xE0;m &#x111;&#x1B0;&#x1EE3;c th&#xEC; MicroPython c&#x169;ng l&#xE0;m &#x111;c, gi&#x1ED1;ng nh&#x1B0; &#x111;i&#x1EC1;u khi&#x1EC3;n hardware v&#xE0; k&#x1EBF;t n&#x1ED1;i device. B&#x1EA1;n c&#xF3; th&#x1EC3; d&#xF9;ng GPIO, PWM, I2C,UART, SPI, th&#x1EAD;m ch&#xED; t&#xEC;m m&#x1EA1;ng v&#xE0; Wifi, k&#x1EBF;t n&#x1ED1;i m&#x1EA1;ng v&#x1EDB;i Micropython nh&#x1B0; nh&#x1EEF;ng v&#xED; d&#x1EE5; tr&#xEA;n c&#x1EE7;a m&#xEC;nh r&#x1ED3;i &#x111;&#x1EA5;y.</p><p>N&#xF3;i t&#xF3;m l&#x1EA1;i th&#xEC; MicroPython l&#xE0;m &#x111;&#x1B0;&#x1EE3;c r&#x1EA5;t nhi&#x1EC1;u th&#x1EE9;. T&#x1EA5;t c&#x1EA3; m&#x1ECD;i th&#x1EE9; m&#xE0; b&#x1EA1;n c&#xF3; th&#x1EC3; t&#x1B0;&#x1EDF;ng t&#x1B0;&#x1EE3;ng ra &#x111;&#x1B0;&#x1EE3;c.</p><h2 id="so-s-nh-micropython-v-i-arduino">So s&#xE1;nh Micropython v&#x1EDB;i Arduino</h2><p>C&#xF3; m&#x1ED9;t v&#xE0;i &#x111;i&#x1EC3;m kh&#xE1;c bi&#x1EC7;t quan tr&#x1ECD;ng gi&#x1EEF;a Arduino v&#xE0; MicroPython. &#x110;&#x1EA7;u ti&#xEA;n l&#xE0; Arduino l&#xE0; m&#x1ED9;t &apos;h&#x1EC7; sinh th&#xE1;i&apos; v&#x1EDB;i Arduino IDE, ng&#xF4;n ng&#x1EEF; l&#x1EAD;p tr&#xEC;nh Arduino (d&#x1EF1;a tr&#xEA;n C/C ++) v&#xE0; ph&#x1EA7;n c&#x1EE9;ng Arduino nh&#x1B0; Arduino Uno R3.</p><p>MicroPython ch&#x1EC9; l&#xE0; m&#x1ED9;t tr&#xEC;nh th&#xF4;ng d&#x1ECB;ch ng&#xF4;n ng&#x1EEF; l&#x1EAD;p tr&#xEC;nh v&#xE0; kh&#xF4;ng bao g&#x1ED3;m m&#x1ED9;t tr&#xEC;nh so&#x1EA1;n th&#x1EA3;o (IDE). M&#x1ED9;t s&#x1ED1; board MicroPython h&#x1ED7; tr&#x1EE3; tr&#xEC;nh ch&#x1EC9;nh s&#x1EED;a/ nh&#x1EAF;code d&#x1EF1;a tr&#xEA;n web, nh&#x1B0;ng v&#x1EDB;i h&#x1EA7;u h&#x1EBF;t c&#xE1;c board MicroPython, b&#x1EA1;n s&#x1EBD; vi&#x1EBF;t m&#xE3; trong tr&#xEC;nh so&#x1EA1;n th&#x1EA3;o v&#x103;n b&#x1EA3;n mong mu&#x1ED1;n c&#x1EE7;a m&#xEC;nh v&#xE0; sau &#x111;&#xF3; s&#x1EED; d&#x1EE5;ng c&#xE1;c c&#xF4;ng c&#x1EE5; &#x111;&#x1EC3; t&#x1EA3;i l&#xEA;n v&#xE0; ch&#x1EA1;y code tr&#xEA;n board.</p><p>S&#x1EF1; kh&#xE1;c bi&#x1EC7;t quan tr&#x1ECD;ng th&#x1EE9; hai l&#xE0; ng&#xF4;n ng&#x1EEF; MicroPython &#x111;&#x1B0;&#x1EE3;c th&#xF4;ng d&#x1ECB;ch(interpreter) thay v&#xEC; &#x111;&#x1B0;&#x1EE3;c bi&#xEA;n d&#x1ECB;ch th&#xE0;nh t&#x1EAD;p l&#x1EC7;nh &#x111;&#x1EC3; CPU c&#xF3; th&#x1EC3; ch&#x1EA1;y tr&#x1EF1;c ti&#x1EBF;p nh&#x1B0; v&#x1EDB;i ng&#xF4;n ng&#x1EEF; l&#x1EAD;p tr&#xEC;nh C/C++ c&#x1EE7;a Arduino. &#x110;&#x1B0;&#x1EE3;c th&#xF4;ng d&#x1ECB;ch c&#xF3; ngh&#x129;a l&#xE0; khi code MicroPython ch&#x1EA1;y, n&#xF3; ph&#x1EA3;i th&#x1EF1;c hi&#x1EC7;n th&#xEA;m m&#x1ED9;t ch&#xFA;t c&#xF4;ng vi&#x1EC7;c &#x111;&#x1EC3; chuy&#x1EC3;n &#x111;&#x1ED5;i t&#x1EEB; code MicroPython th&#xE0;nh c&#xE1;c l&#x1EC7;nh m&#xE0; CPU hi&#x1EC3;u &#x111;&#x1B0;&#x1EE3;c.</p><p>M&#x1ED9;t &#x1B0;u &#x111;i&#x1EC3;m ch&#xED;nh c&#x1EE7;a m&#xE3; th&#xF4;ng d&#x1ECB;ch l&#xE0; n&#xF3; c&#xF3; th&#x1EC3; g&#x1ECD;n g&#xE0;ng v&#xE0; &#x111;&#x1A1;n gi&#x1EA3;n h&#x1A1;n nhi&#x1EC1;u so v&#x1EDB;i c&#xE1;c ng&#xF4;n ng&#x1EEF; bi&#xEA;n d&#x1ECB;ch tr&#x1EF1;c ti&#x1EBF;p theo l&#x1EC7;nh CPU. B&#x1EA1;n th&#x1EAD;m ch&#xED; c&#xF3; th&#x1EC3; vi&#x1EBF;t v&#xE0; ch&#x1EA1;y m&#xE3; th&#xF4;ng d&#x1ECB;ch nh&#x1B0; MicroPython tr&#x1EF1;c ti&#x1EBF;p tr&#xEA;n board m&#xE0; kh&#xF4;ng c&#x1EA7;n bi&#xEA;n d&#x1ECB;ch ho&#x1EB7;c t&#x1EA3;i l&#xEA;n - &#x111;i&#x1EC1;u n&#xE0;y kh&#xF4;ng th&#x1EC3; v&#x1EDB;i Arduino!</p><p>M&#x1ED9;t nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m c&#x1EE7;a m&#xE3; &#x111;&#x1B0;&#x1EE3;c th&#xF4;ng d&#x1ECB;ch v&#xE0; MicroPython so v&#x1EDB;i Arduino l&#xE0; performance s&#x1EBD; th&#x1EA5;p h&#x1A1;n v&#xE0; &#x111;&#xF4;i khi s&#x1EED; d&#x1EE5;ng nhi&#x1EC1;u b&#x1ED9; nh&#x1EDB; h&#x1A1;n khi th&#xF4;ng d&#x1ECB;ch code. M&#x1ED9;t ch&#x1B0;&#x1A1;ng tr&#xEC;nh &#x111;&#x1B0;&#x1EE3;c vi&#x1EBF;t b&#x1EB1;ng Arduino s&#x1EBD; ch&#x1EA1;y nhanh nh&#x1EA5;t c&#xF3; th&#x1EC3; tr&#xEA;n CPU c&#x1EE7;a board trong khi m&#xE3; t&#x1B0;&#x1A1;ng t&#x1EF1; trong MicroPython s&#x1EBD; ch&#x1EAD;m h&#x1A1;n m&#x1ED9;t ch&#xFA;t v&#xEC; n&#xF3; ph&#x1EA3;i gi&#x1EA3;i th&#xED;ch m&#x1ECD;i l&#x1EC7;nh v&#xE0; chuy&#x1EC3;n &#x111;&#x1ED5;i n&#xF3; th&#xE0;nh m&#xE3; CPU (t&#x1EA5;t nhi&#xEA;n &#x1EDF; &#x111;&#xE2;y m&#xEC;nh kh&#xF4;ng so s&#xE1;nh v&#x1EDB;i c&#xE1;ch l&#x1EAD;p tr&#xEC;nh b&#x1EB1;ng C v&#x1EDB;i thanh ghi ho&#x1EB7;c assembly code). Trong th&#x1EF1;c t&#x1EBF;, hi&#x1EC7;u su&#x1EA5;t n&#xE0;y hi&#x1EBF;m khi l&#xE0; m&#x1ED9;t v&#x1EA5;n &#x111;&#x1EC1;l&#x1EDB;n &#xA0;&#x111;&#x1ED1;i v&#x1EDB;i c&#xE1;c lo&#x1EA1;i d&#x1EF1; &#xE1;n m&#xE0; b&#x1EA1;n c&#xF3; th&#x1EC3; t&#x1EA1;o v&#x1EDB;i Arduino. N&#x1EBF;u b&#x1EA1;n g&#x1EB7;p s&#x1EF1; c&#x1ED1; v&#x1EC1; performance ho&#x1EB7;c b&#x1ED9; nh&#x1EDB;, MicroPython cho ph&#xE9;p b&#x1EA1;n vi&#x1EBF;t m&#xE3; b&#x1EB1;ng C/C ++ ho&#x1EB7;c assembly instruction v&#x1EDB;i CPU g&#x1ED1;c c&#x1EE7;a board &#x111;&#x1EC3; &#x111;&#x1EA1;t hi&#x1EC7;u su&#x1EA5;t t&#x1ED1;i &#x111;a. Th&#x1EBF; th&#xEC; qu&#xE1; kh&#x1EE7;ng r&#x1ED3;i c&#xF2;n &#x111;&#xF2;i h&#x1ECF;i g&#xEC; n&#x1EEF;a...</p><p>Cu&#x1ED1;i c&#xF9;ng th&#xEC; kh&#xF4;ng c&#xF3; c&#xE2;u tr&#x1EA3; l&#x1EDD;i &#x111;&#x1A1;n gi&#x1EA3;n n&#xE0;o cho s&#x1EF1; l&#x1EF1;a ch&#x1ECD;n gi&#x1EEF;a MicroPython v&#xE0; Arduino. M&#x1ED7;i lo&#x1EA1;i &#x111;&#x1EC1;u c&#xF3; &#x111;i&#x1EC3;m m&#x1EA1;nh v&#xE0; &#x111;i&#x1EC3;m y&#x1EBF;u c&#x1EA7;n &#x111;&#x1B0;&#x1EE3;c xem x&#xE9;t cho c&#xE1;c d&#x1EF1; &#xE1;n c&#x1EE7;a ri&#xEA;ng b&#x1EA1;n. &#x110;&#x1EEB;ng ng&#x1EA1;i th&#x1EED; MicroPython - &#x111;&#x1ED1;i v&#x1EDB;i m&#x1ED9;t s&#x1ED1; board nh&#x1B0; ESP8266, b&#x1EA1;n th&#x1EF1;c s&#x1EF1; c&#xF3; th&#x1EC3; s&#x1EED; d&#x1EE5;ng MicroPython ho&#x1EB7;c Arduino v&#xE0; ch&#x1ECD;n &#x111;&#xE2;u l&#xE0; c&#xE1;i t&#x1ED1;t nh&#x1EA5;t cho nhu c&#x1EA7;u c&#x1EE7;a m&#xEC;nh.</p><h2 id="h-ng-ph-t-tri-n">H&#x1B0;&#x1EDB;ng ph&#xE1;t tri&#x1EC3;n</h2><p>T&#x1EA5;t nhi&#xEA;n h&#x1ECD;c xong r&#x1ED3;i ph&#x1EA3;i ti&#x1EBF;p t&#x1EE5;c ph&#xE1;t tri&#x1EC3;n l&#xEA;n ti&#x1EBF;p ch&#x1EE9;, th&#x1EBF; ngu&#x1ED3;n &#x1EDF; &#x111;&#xE2;u m&#xE0; coi b&#xE2;y gi&#x1EDD; ? y&#xEA;n t&#xE2;m nh&#xE9; b&#x1EA1;n t&#xF4;i &#x1A1;i, link b&#xEA;n d&#x1B0;&#x1EDB;i &#x111;&#x1EA7;y &#x111;&#x1EE7; cho b&#x1EA1;n ng&#xE2;m c&#x1EE9;u</p><ul><li><a href="http://micropython.org/" rel="nofollow">MicroPython homepage</a></li><li><a href="http://docs.micropython.org/en/latest/" rel="nofollow">MicroPython pyboard documentation</a></li><li><a href="http://docs.micropython.org/en/latest/" rel="nofollow">MicroPython ESP8266 documentation</a> v&#xE0; <a href="https://forum.micropython.org/viewtopic.php?f=16&amp;t=1908" rel="nofollow">MicroPython ESP8266 FAQ forum page</a></li><li><a href="https://microbit-micropython.readthedocs.io/en/latest/" rel="nofollow">MicroPython BBC micro:bit documentation</a></li><li><a href="https://docs.micropython.org/en/latest/wipy/quickref.html">MicroPython WiPy documentation</a></li><li><a href="https://github.com/micropython/micropython/wiki" rel="nofollow">MicroPython Developer Wiki</a></li><li><a href="https://github.com/micropython/micropython/wiki/Differences" rel="nofollow">Differences between MicroPython and standard desktop Python</a></li></ul><p>N&#x1EBF;u g&#x1EB7;p issue th&#xEC; ph&#x1EA3;i l&#xE0;m sao ? V&#xE0;o link n&#xE0;y giao l&#x1B0;u v&#x1EDB;i c&#xE1;c b&#x1EA1;n tr&#xEA;n th&#x1EBF; gi&#x1EDB;i nha b&#x1EA1;n</p><ul><li><a href="https://forum.micropython.org/" rel="nofollow">MicroPython forums</a></li><li><a href="https://github.com/micropython" rel="nofollow">MicroPython GitHub home</a></li></ul><p>Th&#x1EBF; l&#xE0; &#x111;&#x1EE7; m&#x1ECD;i th&#xF4;ng tin cho anh em r&#x1ED3;i nh&#xE9;. T&#x1EDB;i gi&#x1EDD; b&#x1EA5;m n&#xFA;t r&#x1ED3;i, th&#xE2;n ch&#xE0;o ace v&#xE0; h&#x1EB9;n g&#x1EB7;p l&#x1EA1;i &#x1EDF; series sau.</p><p></p>]]></content:encoded></item></channel></rss>