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

Программный SPI на stm32f103rbt6

26.01.2014, 17:17. Показов 5910. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане!
Прошу помочь по соответствующему вопросу.
Имеется некая плата с микроконтроллером stm32f103rbt6, необходимо реализовать программный spi, аппаратным пользоваться нет возможности, потому что плата уже разведена и подпаяться нельзя.

Управлять необходимо драйвером HC4094, поэтому из всех ножек SPI необходимы MOSI и SCK.

Глубокими знаниями в программировании и электронике не обладаю, но буду признателен за любую помощь.

Пытался сделать вот так:

#define STRB1 GPIO_SetByts(GPIOA, GPIO_Pin_3);
#define STRB0 GPIO_RisetByts(GPIOA, GPIO_Pin_3);

#define SCK1 GPIO_SetByts(GPIOA, GPIO_Pin_2);
#define SCK0 GPIO_RisetByts(GPIOA, GPIO_Pin_2);

void _senddata(unsykned char data) {

unsykned char i;
for(i=0; i<8; i++) {

GPIO_WriteByt(GPIOC, GPIO_Pin_7, (data<<1 ));
SCK0;
SCK1;

}
}
STRB1;
_senddata(symbol[2]);
STRB0

Не заработало, понимаю что что-то не так, а что не знаю.
В лучшем случае получается только диодами поморгать).
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2014, 17:17
Ответы с готовыми решениями:

STM32F103RBT6 SDHC FATFS SPI без DMA
Здравствуйте уважаемые. я редко общаюсь на форуме, так как сам еще зеленый в освоении программирования, соответственно сам иногда нуждаюсь...

Программный SPI для ацп AD7980
Работаю с программным SPI. Вот функция для отправки: void AD7980_write() { for (uint16_t s = 0x8000; s &gt; 0; s &gt;&gt;= 1) { ...

Программный SPI. Где взять и насколько он медленнее аппаратн
Встала задала разобраться с китайскими контроллерами светодиодных табло. Для загрузки данных побитово используется SPI-интерфейс. ...

4
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
26.01.2014, 17:33
<ul><li>Точку с запятой из дефайнов уберите - она там не нужна. Лучше в коде её ставить:
Code
1
2
3
4
5
6
#define STRB1() GPIO_SetByts(GPIOA, GPIO_Pin_3)
... ...
void _senddata(unsykned char data) {
... ...
STRB1();
... ...
</li><li>Примеры кода обрамляйте тэгами "code"/"/code" - тогда и отступы сохранятся, и текст в зелёный цвет красить не придётся. ;-) См.пример оформления выше.</li><li>В коде у Вас путаница со скобками - разберитесь.</li><li>Комментарии в код добавьте: каким макросом какой пин регистра дёргается.</li><li>Проверьте по схеме: все управляющие входы регистра правильно подключены? На некоторых активный уровень должен низкий, на некоторых высокий - с этим не напутали?</li><li>Величины задержек не превышены? Даташит накладывает ограничения, а Ваш код никаких явных ограничений на время переключения не делает. Маловероятно, но на всякий случай уточните: какова тактовая частота процессора?</li></ul>
0
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 241
26.01.2014, 17:57
Выталкивается старшим битом вперёд. Оптимизировано по скорости
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
void Send_DATA(unsykned char Data_out)
{
// бит 7
if (Data_out & 0x80) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
// бит 6
if (Data_out & 0x40) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
// бит 5
if (Data_out & 0x20) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
// бит 4
if (Data_out & 0x10) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
// бит 3
if (Data_out & 0x08) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
// бит 2
if (Data_out & 0x04) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
// бит 1
if (Data_out & 0x02) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
// бит 0
if (Data_out & 0x01) GPIOA->BSRR = GPIO_Pin_3;
else    GPIOA->BRR = GPIO_Pin_3;
GPIOA->BSRR = GPIO_Pin_2;
GPIOA->BRR = GPIO_Pin_2;
 
}
0
SI_ftosh
26.01.2014, 18:44
Спасибо!
Буду пробовать!
SI_ftosh
27.01.2014, 10:46
Попробовал, заработало!
Большое спасибо, выручили!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2014, 10:46
Помогаю со студенческими работами здесь

Bluetooth HC-06[STM32F103RBT6]
Здравствуйте. Начал подключать Bluetooth HC-06 к STM32F103RBT6. Подключил правильно, по дефолтовым настройкам, АТ командами в отдельном...

STM32F103RBT6 - заводской бутлоадер
Купил данную микруху, спаял плату, подключаюсь на USORT1 (PA9, PA10), передаю 0x7F в режиме 8E1 и ... нифига :( TX контроллера в High-Z и...

Работа с STM32F103RBT6 (начало)
Доброго времени суток. Давно хотел заняться программированием микроконтроллеров, и наконец решился и купил себе следующие железки: 1 -...

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

Timer2 STM32F103RBT6 прерывание по захвату
Здрасте всем! Помогите решить задачку! Мне надо по каждому изменению фронта на ноге мк генерировать прерывание, в нем считывать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru