mbed library for using USART DMA in STM32F401RE.
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* mbed library for using USART DMA in STM32F401RE. 00002 * Copyright (c) 2015 Match 00003 * 00004 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00005 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00006 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00007 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00008 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00009 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00010 * THE SOFTWARE. 00011 */ 00012 00013 #include "mbed.h" 00014 00015 uint8_t data[] = "Hello.\n" 00016 "How are you?\n" 00017 "abcdefghijklmnopqrstuvwxyz\n" 00018 "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n" 00019 "See you.\n\n"; 00020 00021 DMA_HandleTypeDef usartTxDma; 00022 USART_HandleTypeDef usart; 00023 00024 void Init(); 00025 00026 int main() { 00027 Init(); 00028 00029 HAL_USART_Transmit_DMA(&usart, data, sizeof(data)); 00030 00031 while(1) { 00032 00033 } 00034 } 00035 00036 void Init() { 00037 // DMA 00038 // USART2 TX is DMA1 channel 4 stream 6. Look at table 28 in STM32F401 reference manual. 00039 __DMA1_CLK_ENABLE(); 00040 usartTxDma.Instance = DMA1_Stream6; 00041 usartTxDma.Init.Channel = DMA_CHANNEL_4; 00042 usartTxDma.Init.Direction = DMA_MEMORY_TO_PERIPH; 00043 usartTxDma.Init.PeriphInc = DMA_PINC_DISABLE; 00044 usartTxDma.Init.MemInc = DMA_MINC_ENABLE; 00045 usartTxDma.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; // 8 bit 00046 usartTxDma.Init.MemDataAlignment = DMA_PDATAALIGN_BYTE; // 8 bit 00047 usartTxDma.Init.Mode = DMA_NORMAL; 00048 usartTxDma.Init.Priority = DMA_PRIORITY_VERY_HIGH; 00049 usartTxDma.Init.FIFOMode = DMA_FIFOMODE_DISABLE; 00050 HAL_DMA_Init(&usartTxDma); 00051 00052 // USART pin 00053 __GPIOA_CLK_ENABLE(); 00054 GPIO_InitTypeDef usartTxd; 00055 usartTxd.Pin = GPIO_PIN_2; 00056 usartTxd.Mode = GPIO_MODE_AF_PP; 00057 usartTxd.Pull = GPIO_NOPULL; 00058 usartTxd.Speed = GPIO_SPEED_HIGH; 00059 usartTxd.Alternate = GPIO_AF7_USART2; 00060 HAL_GPIO_Init(GPIOA, &usartTxd); 00061 00062 // USART 00063 __USART2_CLK_ENABLE(); 00064 usart.Init.BaudRate = 921600; 00065 usart.Init.WordLength = USART_WORDLENGTH_8B; 00066 usart.Init.StopBits = USART_STOPBITS_1; 00067 usart.Init.Parity = USART_PARITY_NONE; 00068 usart.Init.Mode = USART_MODE_TX; // transmit only mode 00069 usart.Instance = USART2; 00070 usart.hdmatx = &usartTxDma; 00071 HAL_USART_Init(&usart); 00072 }
Generated on Thu Aug 4 2022 09:10:00 by
1.7.2