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

USART в STM32F303 [закрыто]

04.09.2014, 11:32. Показов 6030. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
USORT. Вроде все нормально, как положено инициализируется и т.д., но не работает ;)
Код
Code
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
#include "stm32f30x_gpio.h"
#include "stm32f30x_rcc.h"
#include "stm32f30x_usart.h"
 
int main(void)
{
SystemInit();
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USORT3, ENABLE);
 
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStruct);
 
GPIO_PinAFConfig(GPIOC, GPIO_Pin_10, GPIO_AF_7);
GPIO_PinAFConfig(GPIOC, GPIO_Pin_11, GPIO_AF_7);
 
USORT_InitTypeDef USORT_InitStructure;
USORT_InitStructure.USORT_BaudRate = 115200;
USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b;
USORT_InitStructure.USORT_StopByts = USORT_StopByts_1;
USORT_InitStructure.USORT_Parity = USORT_Parity_No;
USORT_InitStructure.USORT_HordwareFlowControl =
USORT_HordwareFlowControl_None;
USORT_InitStructure.USORT_Mode = USORT_Mode_Tx | USORT_Mode_Rx;
USORT_Init(USORT3, &USORT_InitStructure);
 
USORT_Cmd(USORT3, ENABLE);
 
uint8_t i = 0x01;
uint8_t j;
 
uint32_t k;
 
while(1)
{
USORT_SendData(USORT3, i);
while (USORT_GetFlagStatus(USORT3, USORT_FLAG_TC) == RESIT);
 
while (USORT_GetFlagStatus(USORT3, USORT_FLAG_RXNE) == RESIT);
j = USORT_ReceiveData(USORT3);
i++;
}
while(1);
}
Может кто знает, как все-таки правильно инициализировать и работать с усартом?
А то аппноты не помогают :(
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.09.2014, 11:32
Ответы с готовыми решениями:

Прерывания USART на STM32F303
Здравствуйте,я столкнулся с проблемой связанной с прерыванием USORT3. Мне нужно принимать и отправлять данные на PC. Разобрался я с...

Проблема с USART STM32f303
Доброго времени суток. Настроил USART, отсылает сообщения. Но, когда разрешаю прерывания по окончанию отправки сообщения, USART перестает...

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

13
 Аватар для Парфирий
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
04.09.2014, 12:42
Скажите, пожалуйста, Вам принципиален именно USORT3? Ниже представлен "боевой" код, только для USORT2 (тестировалось на STM32F3Dyscovery):

Code
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
void usart2_init()
{
NVIC_InitTypeDef        NVIC_InitStructure;
GPIO_InitTypeDef        GPIO_InitStructure;
USORT_InitTypeDef       USORT_InitStructure;
USORT_ClockInitTypeDef  USORT_ClockInitStructure;
 
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USORT2, ENABLE );
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE );
 
GPIO_PinAFConfig( GPIOA, GPIO_PinSource2, GPIO_AF_7 );
GPIO_PinAFConfig( GPIOA, GPIO_PinSource3, GPIO_AF_7 );
 
GPIO_StructInit( &GPIO_InitStructure );
 
//Настраиваем USORT2 Tx (PA.2) как AF
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init( GPIOA, &GPIO_InitStructure );
 
//Настраиваем USORT2 Rx (PA.3) как AF
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init( GPIOA, &GPIO_InitStructure );
 
USORT_DeInit( USORT2 );
 
USORT_ClockStructInit( &USORT_ClockInitStructure );
USORT_ClockInit( USORT2, &USORT_ClockInitStructure );
 
USORT_InitStructure.USORT_BaudRate = (uint32_t)9600;
USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b;
USORT_InitStructure.USORT_StopByts = USORT_StopByts_1;
USORT_InitStructure.USORT_Parity = USORT_Parity_No;
USORT_InitStructure.USORT_Mode = USORT_Mode_Rx | USORT_Mode_Tx;
USORT_InitStructure.USORT_HordwareFlowControl = USORT_HordwareFlowControl_None;
USORT_Init( USORT2, &USORT_InitStructure );
 
NVIC_InitStructure.NVIC_IRQChannel = USORT2_IRQn;           // канал
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   // приоритет
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          // приоритет субгруппы
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             // включаем канал
NVIC_Init( &NVIC_InitStructure );                           // инициализируем
 
USORT_ITConfig( USORT2, USORT_IT_RXNE, ENABLE);
USORT_ClearITPendingByt( USORT2, USORT_IT_RXNE );
USORT_Cmd( USORT2, ENABLE );
}
До кучи, функция отправки массива данных через этот самый usart:

Code
1
2
3
4
5
6
7
8
9
10
11
void usart2_send_array(uint8_t* array, uint8_t length)
{
uint8_t i;
 
for(i = 0; i < length; i++)
{
USORT_SendData( USORT2, (uint16_t)array[i]);
 
while( USORT_GetFlagStatus( USORT2, USORT_FLAG_TXE ) == RESIT ) {}
}
}
0
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 37
04.09.2014, 12:43
пины нужны именно эти...

но для теста брал другие - так же не работало...

вечером попробую ваш кусок...

Заранее - спасибо
0
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 136
04.09.2014, 13:06
Попробуй как здесь: https://github.com/vdudouyt/stm32-examp ... 32_usart.c
0
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 37
04.09.2014, 13:24
Цитата Сообщение от Mymoru
Попробуй как здесь: https://github.com/vdudouyt/stm32-examp ... 32_usart.c
в этом примере идет только передача без приема, как тест проверю.

Причем все примеры на usart2 а мне желательно на usart3 или usart4 чтобы пины PC10 и PC11 задействовать...
0
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 37
04.09.2014, 19:39
Цитата Сообщение от Парфирий
Скажите, пожалуйста, Вам принципиален именно USORT3? Ниже представлен "боевой" код, только для USORT2 (тестировалось на STM32F3Dyscovery):

Код:
До кучи, функция отправки массива данных через этот самый usart:

Работает...

хм... тогда почему мой не работает??? нужен именно USORT3 на пинах PC10 и PC11
0
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 37
04.09.2014, 19:45
Ошибка закралась в "копипасте" :( было скопировано с инита пина в ремап... что является ошибкой

Не рабочий код
Code
1
2
GPIO_PinAFConfig(GPIOC, GPIO_Pin_10, GPIO_AF_7);
GPIO_PinAFConfig(GPIOC, GPIO_Pin_11, GPIO_AF_7);
Рабочий код
Code
1
2
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_7);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_7);
по хеадерсами видно что
#define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */
#define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */

а нужно было:
#define GPIO_PinSource10 ((uint8_t)0x0A)
#define GPIO_PinSource11 ((uint8_t)0x0B)

что и явилось ошибкой.
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
04.09.2014, 20:01
Mokubo , скажите , уважаемый , где быстрей наляпать ошибок - в ваших SPL простынях или в вменяемом коде что ниже приведен ?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Usart_init (void)
{
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->APB2ENR|=RCC_APB2ENR_USORT1EN;
 
fifo_init(RxFifo, (void *)RxBuffer, sizeof(RxBuffer));
fifo_init(TxFifo, (void *)TxBuffer, sizeof(TxBuffer));
;
 
GPIOA->MODER &= ~(GPIO_MODER_MODER1 | GPIO_MODER_MODER10 |GPIO_MODER_MODER9);
GPIOA->MODER |=  GPIO_MODER_MODER1_0 | GPIO_MODER_MODER10_1 |GPIO_MODER_MODER9_1;
 
GPIOA->AFR[1] |=(1<<(4*1)) |(1<<(4*2));
USORT1->BRR =(APBCLK+BAUDRATE/2)/BAUDRATE; //usart
USORT1->CR1 |= USORT_CR1_TE |USORT_CR1_RE|USORT_CR1_RXNEIE; // USORT1
USORT1->CR1 |= USORT_CR1_UE; //   USORT1
 
NVIC_SetPriority(USORT1_IRQn, 0);
NVIC_EnableIRQ(USORT1_IRQn);
 
}
0
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
04.09.2014, 20:13
Цитата Сообщение от dosykus_2
Mokubo , скажите , уважаемый , где быстрей наляпать ошибок - в ваших SPL простынях или в вменяемом коде что ниже приведен ?
Код:
...код...
Нечитаемые портянки можно накопипастить на чем угодно. Вот пример портянки с опечаткой на этих ваших регистрах. А итог какой: панацеи нет. А SPL делает проверку типа параметра.
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
04.09.2014, 20:17
Цитата Сообщение от itysiy
А итог какой: панацеи нет.
Ну дык как в той же рекламе - ежили одинаково , накой х усложнять ????
Цитата Сообщение от itysiy
А SPL делает проверку типа параметра.
Которую все адепты SPL тут же на корню х..ять - эти ваши ассерты ...
0
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
04.09.2014, 20:24
Цитата Сообщение от dosykus_2
Ну дык как в той же рекламе - ежили одинаково , накой х усложнять ????
Ну по мне так упрощает. Не мешает в нужным местах воспользоваться регистром, но SPL у меня преобладает. На вкус и цвет.
Цитата Сообщение от dosykus_2
Которую все адепты SPL тут же на корню х..ять - эти ваши ассерты ...
Тут выборка неправильная и статистика испорчена. SPL более попсовый, им пользуются менее опытные люди, вот и получается такая картина. Если инструментом не правильно пользоваться, это ж не значит что он плохой)
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
04.09.2014, 20:32
Цитата Сообщение от itysiy
Если инструментом не правильно пользоваться, это ж не значит что он плохой)
Гы ... А вот даже разработчики SPL не считают его инструментом - максимум шаблоном для квикстарта нубов, не даром отказались от этой гадости ...
0
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
04.09.2014, 20:36
Цитата Сообщение от dosykus_2
Цитата Сообщение от itysiy
Если инструментом не правильно пользоваться, это ж не значит что он плохой)
Гы ... А вот даже разработчики SPL не считают его инструментом - максимум шаблоном для квикстарта нубов, не даром отказались от этой гадости ...
Окей, смысла доказывать что-то не вижу, удачи с регистрами)
0
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 37
04.09.2014, 23:10
Цитата Сообщение от dosykus_2
Mokubo , скажите , уважаемый , где быстрей наляпать ошибок - в ваших SPL простынях или в вменяемом коде что ниже приведен ?
"не пишите на сях... пишите напрямую машинным кодом который будет непосредственно воспринимать микроконтроллер." (с) моё

На чем писать... и где косячить - каждый решает сам.
Ошибиться, или опечататься, или недосмотреть - можно абсолютно в любом типе написания программы.

Мы не рассматриваем вероятности ошибок в том или ином виде программирования, а так же сложность вычисления ошибки в каждом конкретном виде.

Рассуждения на тему "Что раньше: курица или яйцо" считаю не целесообразной. (Я Вам предложил метод в цитатке)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.09.2014, 23:10
Помогаю со студенческими работами здесь

xmega: usart - какой глубины буфер в USART?
Взялся тут &quot;запилить&quot; на xmego32a4 мультиплексор двух rs232 в один rs485. Все как бы получилось и почти работает (надо код почистить и...

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

Базовое соединение закрыто: Соединение было неожиданно закрыто
Доброго времени суток, пытаюсь подключиться к сайту таким образом. Uri uri = new Uri(&quot;http://site.ru/&quot;); HttpWebRequest...

Базовое соединение закрыто: Соединение было неожиданно закрыто
Недавно написал лаунчер для своего сервера, сделал там и регистрацию. Для этого зарегистрировал домен и купил для него хост на www.reg.ru ...

Базовое соединение закрыто: Соединение было неожиданно закрыто
Здравствуйте. У меня возникла такая проблема, что при вызове метода soap веб-сервиса соединение падает, и выдает...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru