Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 1 / 1
Регистрация: 11.11.2015
Сообщений: 24

Spi через регистры

19.01.2019, 22:21. Показов 2292. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пишу в truestudio использую hal

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* USER CODE BEGIN WHILE */
  while (1)
  {
      HAL_UART_Transmit(&huart1,(uint8_t*)buf, 3, 0xFFFF);
         // HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
          GPIOC->BSRR = GPIO_BSRR_BS13;
          HAL_Delay(500);
          //HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
          GPIOC->BSRR = GPIO_BSRR_BR13;
          HAL_Delay(500);
        
                SPI1->DR = 1;
        while (!(SPI1->SR&SPI_SR_TXE));
 
        //uint8_t b=1;
        // HAL_SPI_Transmit(&hspi1, &b, 1, 0xFFFFFFFF);
  /* USER CODE END WHILE */
поменял вывод в ноги напрямую в регистры - работает.
а вот с выводом в spi что-то не получается. флаг окончания не устанавливается. виснет на строке
while (!(SPI1->SR&SPI_SR_TXE));
если писать как в закомпилированных строках через хал, то работает
где грабли?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2019, 22:21
Ответы с готовыми решениями:

Запуск ацп через регистры
Несколько дней пытаюсь включить АЦП и заставить его передавать данные на ЦАП без ПДП. мк stm32f303k8, IDE mykroC PRO for ARM. вот код ...

Экран на ili9481 через SPI
Недавно пришёл с алика сенсорный экранчик на ili9481. Пробую отрисовать на нём что-либо, но ничего не выходит. Проект создан в CubeIDE,...

Проблемы с fatfs через spi [решено].
Возникала такая проблема с fatfs через spi. Система монтируется, файлы открываются, и даже создаются пустые файлы, но их не возможно...

9
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
19.01.2019, 23:56
Посмотрите что делает hal. может быть он включает SPI в своей функции, если он все еще не включен и не настроен.
1
2 / 1 / 1
Регистрация: 11.11.2015
Сообщений: 24
20.01.2019, 00:09  [ТС]
благодарю. точно.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while (1)
  {
      HAL_UART_Transmit(&huart1,(uint8_t*)buf, 3, 0xFFFF);
         // HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
          GPIOC->BSRR = GPIO_BSRR_BS13;
          HAL_Delay(500);
          //HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
          GPIOC->BSRR = GPIO_BSRR_BR13;
          HAL_Delay(500);
        SPI1->CR1 |= 1<<SPI_CR1_SPE_Pos; //Включаем SPI
        while (!(SPI1->SR&SPI_SR_TXE));
         SPI1->DR = 1;
        while (!(SPI1->SR&SPI_SR_BSY));
 
        //uint8_t b=1;
        // HAL_SPI_Transmit(&hspi1, &b, 1, 0xFFFFFFFF);
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
 
  }
0
 Аватар для shepard127
16 / 16 / 1
Регистрация: 20.10.2013
Сообщений: 81
22.01.2019, 17:34
Цитата Сообщение от MaxAle Посмотреть сообщение
SPI1->CR1 |= 1<<SPI_CR1_SPE_Pos; //Включаем SPI
А почему SPI_CR1_SPE_Pos?

Разве не SPI_CR1_SPE

P.S.
Или тема уже решена?
0
2 / 1 / 1
Регистрация: 11.11.2015
Сообщений: 24
23.01.2019, 01:33  [ТС]
я не гуру, только сам взял армовский бубен и по полю с граблями хожу. поясните разницу. и что такое Pos?

Добавлено через 19 минут
.хал как-то мне по душе не пришелся, напоминает ардуино иде, решил армы пощупать, а тут она. не нравиться сие чудо мне.
SPI_CR1- регистр
SPE-бит этого регистра
_Pos?
...попробовал убрать _Pos компиляция проходит, ерора не выскакивает, появляется вонинг

C
1
2
Description Resource    Path    Location    Type
left shift count >= width of type [-Wshift-count-overflow]  main.c  /blink4/Src line 115    C/C++ Problem
спи не запускается. надо в реферес мануал лезть.

Добавлено через 37 минут
в
stm32f103xb.h
определения такие

C
1
2
3
#define SPI_CR1_SPE_Pos                     (6U)                               
#define SPI_CR1_SPE_Msk                     (0x1U << SPI_CR1_SPE_Pos)          /*!< 0x00000040 */
#define SPI_CR1_SPE                         SPI_CR1_SPE_Msk                    /*!< SPI Enable */
поэтому при
SPI1->CR1 |= 1<<SPI_CR1_SPE_Pos
в SPE попадает одын, что включает его
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
23.01.2019, 06:11
Цитата Сообщение от shepard127 Посмотреть сообщение
А почему SPI_CR1_SPE_Pos?
а потому что
Цитата Сообщение от MaxAle Посмотреть сообщение
1<<SPI_CR1_SPE_Pos
_pos означает позиция, 1 сдвинуть на позицию бита
впрочем ТС и сам это нашел
Цитата Сообщение от MaxAle Посмотреть сообщение
.попробовал убрать _Pos компиляция проходит, ерора не выскакивает, появляется вонинг
разумеется на сколько 1 то сдвинуть хочешь
если так нравится работать с битами, то писать нужно
C
1
 SPI1->CR1 |= SPI_CR1_SPE; //Включаем SPI
0
 Аватар для shepard127
16 / 16 / 1
Регистрация: 20.10.2013
Сообщений: 81
23.01.2019, 09:42
Цитата Сообщение от ValeryS Посмотреть сообщение
если так нравится работать с битами, то писать нужно
C
1
SPI1->CR1 |= SPI_CR1_SPE; //Включаем SPI
Ну я как бы, это и имел ввиду сразу
0
2 / 1 / 1
Регистрация: 11.11.2015
Сообщений: 24
24.01.2019, 23:21  [ТС]
ОГРОМНОЕ спасибо. дошло

Добавлено через 23 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
если так нравится работать с битами, то писать нужно
C
1
*SPI1->CR1 |= SPI_CR1_SPE;//Включаем SPI

наверно можно, но при компиляции, учитывая вышеприведенные определения в результате все равно получим:

C
1
2
3
4
5
6
#define SPI_CR1_SPE_Pos (6U) 
#define SPI_CR1_SPE_Msk (0x1U << SPI_CR1_SPE_Pos) /*!< 0x00000040 */
#define SPI_CR1_SPE
SPI1->CR1 |=(0x1U << SPI_CR1_SPE_Pos);
а потом
SPI1->CR1 |=(0x1U << (6U));
не будет ли лучше :
C
1
SPI1->CR1 |= SPI_CR1_SPE_Pos;//т.е. SPI1->CR1 |= (6U);
Добавлено через 12 минут
сори не лучше, не пойдет так, туплю

Добавлено через 34 минуты
C
1
SPI1->CR1 |=0x00000040;
а то так
C
1
SPI1->CR1 |=(0x1U << (6U));
он каждый раз высчитывает что есть 0x1U << (6U)
а это тоже время
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
25.01.2019, 08:04
посмотри в ассемблерном листинге, что получится после компиляции в разных случаях
0
2 / 1 / 1
Регистрация: 11.11.2015
Сообщений: 24
25.01.2019, 22:41  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
посмотри в ассемблерном листинге, что получится после компиляции в разных случаях
ActionScript 3
1
2
3
4
SPI1->CR1 |=0x00000040;
 8000e3e:   682b        ldr r3, [r5, #0]
 8000e40:   f043 0340   orr.w   r3, r3, #64 ; 0x40
 8000e44:   602b        str r3, [r5, #0]
ActionScript 3
1
2
3
4
SPI1->CR1 |= SPI_CR1_SPE;
 8000e3e:   682b        ldr r3, [r5, #0]
 8000e40:   f043 0340   orr.w   r3, r3, #64 ; 0x40
 8000e44:   602b        str r3, [r5, #0]
благодарю. взял лопату, пытаюсь копать, а где не знаю. спасибо за ответы, становиться понятнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2019, 22:41
Помогаю со студенческими работами здесь

Соединение STM32 + Cubieboard через SPI
Добрый день! Соединяю платы STM32 и Cubieboard2 через SPI. Скорость 10МГц. Может ли длинна проводов между платами достигать 10-20 см?

Вывод информации на TFT через SPI
Всем доброго дня. Помогите с выводом информации на TFT-экран (в моем случае на ILI9341 1,8 дюйма). Пример с ногодрыгом нашел, освоил,...

ILI9341 SPI DMA, SPI, UART библиотеки
Доброго времени, форумчане... Посоветуйте библиотек плиз... 0) Либа для работы с контроллером по типу HAL (чисто ваше мнение какая вам...

SD через SPI или новые грабли STM32F415
Доброго всем времени суток! Продолжая ковырять свое устройство наткнулся на некоторую интересную особенность контроллера, связанную то ли с...

Функции для работы c SD картой на STM32F030 (F0) через SPI
Прикручиваю SD карту и FatFs к STM32F030F4P6. Проблема совершенно банальная, нужны низкоуровневые функции под этот контролер. Как минимум...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru