mbed library for using USART DMA in STM32F401RE.

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }