Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
1

Приём данных с usart через dma в память периферии и вывод обратно на usart (для проверки)

26.12.2019, 21:26. Показов 1129. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как сделать так, чтобы при отправке через usart в переменную и обратно вывести по нажатию кнопки на usart(для проверки, что мы записали что-то в эту переменную что-то)??
Очень сильно прошу помощи
Всем доброго вечера и заранее спасибо=^-^=

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "stm32f4xx.h"
#include <stm32f4xx_rcc.h> 
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_dma.h"
#include "stm32f4xx_usart.h"
#include <stm32f4xx_dac.h> 
 
 
unsigned char buffer[129];
 
uint8_t Recieve_buf[256];
uint8_t Recieve_W=0, Recieve_R=0, Recieve_C=0;
 
 
void USART3_Init(void){
  GPIO_InitTypeDef GPIOC_10_11_InitStructure;
  USART_InitTypeDef USART3_InitStructure;
 
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
 
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_USART3);
  GPIOC_10_11_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIOC_10_11_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIOC_10_11_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
  GPIOC_10_11_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIOC_10_11_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIOC_10_11_InitStructure);
  //USART Init
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  USART3_InitStructure.USART_BaudRate = 9600;
  USART3_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART3_InitStructure.USART_StopBits = USART_StopBits_1;
  USART3_InitStructure.USART_Parity = USART_Parity_No;
  USART3_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART3_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
 
  USART_Init(USART3, &USART3_InitStructure);
  USART_Cmd(USART3, ENABLE);
}
void DMAStream3_Channel4_Init(void){
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
  DMA_InitTypeDef DMA_InitStruct;
  DMA_StructInit(&DMA_InitStruct);
  DMA_InitStruct.DMA_Channel = DMA_Channel_4;
  DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&(USART3->DR);
  DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)&Recieve_buf;
  DMA_InitStruct.DMA_DIR = DMA_DIR_MemoryToPeripheral;
  DMA_InitStruct.DMA_BufferSize = 129;
  DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStruct.DMA_Priority = DMA_Priority_Medium;
  DMA_InitStruct.DMA_FIFOMode = DMA_FIFOMode_Disable;
  DMA_InitStruct.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStruct.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStruct.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA1_Stream3, &DMA_InitStruct);
}
 
void USART2_IRQHandler(void){
    if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
    {
        USART_ClearITPendingBit(USART2, USART_IT_RXNE);
        
        Recieve_buf[Recieve_W] = USART_ReceiveData(USART2);
        Recieve_W++;
        Recieve_C++;
    }
    //}
}
 
void USART2_init(void) {
    GPIO_InitTypeDef GPIO_Init_USART;
    USART_InitTypeDef USART_InitUser;
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
    
    GPIO_Init_USART.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;
    GPIO_Init_USART.GPIO_Mode=GPIO_Mode_AF;
    GPIO_Init_USART.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init_USART.GPIO_OType=GPIO_OType_PP;
    GPIO_Init_USART.GPIO_PuPd=GPIO_PuPd_UP;
    
    GPIO_Init(GPIOD, &GPIO_Init_USART);
    
    GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2);
    GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_USART2); 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);
    
    USART_InitUser.USART_BaudRate=9600;
    USART_InitUser.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
    USART_InitUser.USART_Mode=USART_Mode_Rx|USART_Mode_Tx ;
    USART_InitUser.USART_Parity=USART_Parity_No;
    USART_InitUser.USART_StopBits=USART_StopBits_1 ;
    USART_InitUser.USART_WordLength=USART_WordLength_8b ;   
    USART_Init(USART2, &USART_InitUser);    
    NVIC_EnableIRQ(USART2_IRQn);    
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);  
    USART_Cmd(USART2, ENABLE);    
}
 
int main(void)
{
  USART3_Init();
  DMAStream3_Channel4_Init();
  
  while(1){ 
        if( GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==1) {  
            USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE);
            DMA_Cmd(DMA1_Stream3, ENABLE);
        }
        
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2019, 21:26
Ответы с готовыми решениями:

Отправка половины массива в USART через DMA
Доброе время суток. Потребовалось передавать данные в USORT через DMA (половина буфера пишется с...

передача данных USART + DMA и непонятные иероглифы
Всем привет! Есть проблема с передачей данных с МК на ПК через USORT + DMA. Ранее все работало...

Прием данных по USART
Простая задача, решение которой можно найти повсеместно, но не могу понять почему не работает. Хочу...

Прием по USART пакета данных
Добрый день! Подскажите как по USART принять следующий пакет данных: C3C312345678910C3C3.... Мне...

Приём данных usart stm32f4
Помогите сделать, если передавать, например цифру 1-зажигается красный светодиод, 2-голубой,...

0
26.12.2019, 21:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2019, 21:26
Помогаю со студенческими работами здесь

передача данных с 2 портов can и 1 usart в usart
Доброго времени суток форумчане! Пытаюсь написать код для stm32f4disko с помощью которого можно...

Прием данных по USART с использованием HAL + Interrupt
Доброго времени суток! Использую библиотеку HAL для приема данных по USART с использованием...

Прием\Отправка и обработка данных в USART STM32F407VG
Всем доброго времени суток Стоит такая задача:со считывателя RFID приходят данные на порт МК...

Прием команд с компьютера. Разбор пакета данных с USART
Подскажите пожалуйста. не могу понять. Как написать программу что бы микроконтроллер понимал какая...

Usart. Как понять, что прием данных закончен?
Заполняю буфер пришедшими данными. void USART1_IRQHandler(void) { if (USART1-&gt;SR &amp;...

Приём данных по USART и дальнейшая обработка (Ошибка при обработке)
Доброго времени суток изучаю приём USORT и столкнулся со следующей проблемой контролер получил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru