STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
Подскажите в SPI в режиме DMA можно как-нибудь дрыгать ногой СS ? Мне надо выставлять CS через 4 байта так что аппаратный NSS не подходит.
- Реклама
Re: STM32 новичку в ARM что к чему
Возник ещё один вопрос по поводу компилятора
у меня есть вот такая функция
где CHIP_READ
Какого фига компилятор ругается на переменную temp что она не где не используется ??
у меня есть вот такая функция
Код: Выделить всё
void Received_UDP(void){
unsigned char temp1;
//int Sn_RX_RSR;
unsigned char temp=0;
//Sn_RX_RSR0(0)= адрес 426
temp=CHIP_READ(0x0426);
temp1=CHIP_READ(0x0427);
//Sn_RX_RSR|=temp|temp1;
if (temp1 != 0x0000){
// Sn_RX_RSR=0x80|0x03;
temp=CHIP_READ(0x0426);
temp1=CHIP_READ(0x0427);
}
}Спойлер
Код: Выделить всё
unsigned char CHIP_READ(int addr)
{
uint8_t temp=0;
//int dwt_timestamp;
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
//Delay(1); //около 64000 тактов
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,0x0f);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
temp=SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,((addr & 0xFF00) >> 8));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
temp=SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,(addr & 0x00FF));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
temp=SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,0xff);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
//Delay(1);
//dwt_timestamp123 = DWT_CYCCNT;
temp=SPI_I2S_ReceiveData(SPI2);
//Delay(1);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
//dwt_timestamp123 = DWT_CYCCNT - dwt_timestamp123; //готово! результат в CPU-"тиках"
return temp;
}Какого фига компилятор ругается на переменную temp что она не где не используется ??
-
The_D
- Встал на лапы
- Сообщения: 108
- Зарегистрирован: Пт июл 06, 2012 14:28:17
- Откуда: Россия. г.Смоленск
Re: STM32 новичку в ARM что к чему
Но ведь она и правда нигде не используется. Ты просто присвоил ей значение и все. Судя по всему ты мог ничего в нее и не сохранять если дальше это значение никуда не идет.
Re: STM32 новичку в ARM что к чему
На счёт использования уже ответили.
Если нужно просто вызвать CHIP_READ, а возвращаемое значение не нужно, то вызывайте и всё, без лишних переменных.
Если нужно просто вызвать CHIP_READ, а возвращаемое значение не нужно, то вызывайте и всё, без лишних переменных.
Re: STM32 новичку в ARM что к чему
Благодарю были такие мысли, но куда-то быстро исчезли.
А по поводу DMA? для считывания регистров понятно он не подходит но вот если надо записать массив или считать массив данных.
к примеру вот эту функцию реализовать можно ? (раньше фигово работало убрал задержки всё летать стало =))
но всё равно интересно подходит ли DMA в этом случае или нет.
А по поводу DMA? для считывания регистров понятно он не подходит но вот если надо записать массив или считать массив данных.
к примеру вот эту функцию реализовать можно ? (раньше фигово работало убрал задержки всё летать стало =))
но всё равно интересно подходит ли DMA в этом случае или нет.
Спойлер
Код: Выделить всё
void wiz_read_buf(volatile unsigned int addr, volatile unsigned char* buf,int len)
{
int idx = 0;
for (idx=0; idx<len; idx++)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
//Delay(1);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,0x0f);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,(((addr+idx) & 0xFF00) >> 8));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,((addr+idx) & 0x00FF));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,0xff);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
buf[idx]=SPI_I2S_ReceiveData(SPI2);
//Delay(1);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
}- Реклама
Re: STM32 новичку в ARM что к чему
Не то, что подходит, он для этого и предназначендля считывания регистров понятно он не подходит
И передачу через SPI можно сделать через DMA. Посмотрите в библиотеке к Вашему МК, там должны быть примеры.
Иван Сусанин - первый полупроводник 
Re: STM32 новичку в ARM что к чему
Эм какНе то, что подходит, он для этого и предназначен![]()
пока настроил его отправил 1 байт уже всё. Так и обычными командами примерно тоже самое получится
Или я чего-то не догоняю.
я думал его надо использовать когда кучу данных надо передать к примеру 1000 значений записать настроил указало откуда куда и всё пока это всё передаётся туда процессор свободен
-
Darth Cuauhtemoc
- Говорящий с текстолитом
- Сообщения: 1699
- Зарегистрирован: Вс июн 16, 2013 18:41:45
Re: STM32 новичку в ARM что к чему
Да, для одного байта DMA использовать смысла нет.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Re: STM32 новичку в ARM что к чему
pokk, я когда раскурил работу DMA, то хоть 1 байт, хоть 10000, всё через DMA 
Что значит "пока настроил его" ? Один раз настроили необходимый канал, а дальше только вкл/выкл, размер посылки указать, обработать событие, например завершения передачи.
Что значит "пока настроил его" ? Один раз настроили необходимый канал, а дальше только вкл/выкл, размер посылки указать, обработать событие, например завершения передачи.
Иван Сусанин - первый полупроводник 
Re: STM32 новичку в ARM что к чему
добрый день! как в Keil делать ассемблерные вставки?
Re: STM32 новичку в ARM что к чему
Боже упаси от подобного. Надо AVR выкрутасы забывать уже ...drakon писал(а):добрый день! как в Keil делать ассемблерные вставки?
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: STM32 новичку в ARM что к чему
2 drakon
Из встроенной справки:
2 dosikus
Ну мало ли. Вдруг человеку припёрло написать цифровой фильтр или посчитать БПФ.
Из встроенной справки:
Для практического примера поковыряйте стартапы. Ну и ещё DSP библиотеки от STM посмотрите. Там этого много.Inline assembler
The __asm keyword can be used to incorporate inline assembly into a function. For example:
int qadd(int i, int j)
{
int res;
__asm
{
QADD res, i, j
}
return res;
}
See Compiler support for inline assembly language in Using the Compiler for more information.
2 dosikus
Ну мало ли. Вдруг человеку припёрло написать цифровой фильтр или посчитать БПФ.
Re: STM32 новичку в ARM что к чему
DSP либы не STM, внимательней надо быть .uk8amk писал(а): Ну и ещё DSP библиотеки от STM посмотрите. Там этого много.
Ты сам ответил на свой вопрос см. DSP либы...uk8amk писал(а): Ну мало ли. Вдруг человеку припёрло написать цифровой фильтр или посчитать БПФ.
-
sa-ta
- Это не хвост, это антенна
- Сообщения: 1414
- Зарегистрирован: Пн ноя 23, 2009 00:50:23
- Откуда: Crimea, Simferopol
Re: STM32 новичку в ARM что к чему
а такую поделку никто не пробовал ?
http://www.ebay.com/itm/ST-Link-V2-stli ... 565a977e87
Mini ST-LINK/V2,Fully compatible with the official functions,support for automatic upgrades.Support all series of STM32 and STM8.
Functions and features:
1. Support all STM32 series SWD interface debug.
2. Support all STM8 series debug.
3. Support development environment:
1>.ST-LINK Utility 2.0 and the version latest than it.
2>.STVD 4.2.1 and the version latest than it.
3>.STVP 3.2.3 and the version latest than it.
4>.IAR EWARM V6.20 and the version latest than it.
5>.IAR EWSTM8 V1.30 and the version latest than it.
6>.KEIL RVMDK V4.21 and the version latest than it.
4. Support firmware upgrade automatically
интересно, с кокосом сдружить ее возможно?
http://www.ebay.com/itm/ST-Link-V2-stli ... 565a977e87
Mini ST-LINK/V2,Fully compatible with the official functions,support for automatic upgrades.Support all series of STM32 and STM8.
Functions and features:
1. Support all STM32 series SWD interface debug.
2. Support all STM8 series debug.
3. Support development environment:
1>.ST-LINK Utility 2.0 and the version latest than it.
2>.STVD 4.2.1 and the version latest than it.
3>.STVP 3.2.3 and the version latest than it.
4>.IAR EWARM V6.20 and the version latest than it.
5>.IAR EWSTM8 V1.30 and the version latest than it.
6>.KEIL RVMDK V4.21 and the version latest than it.
4. Support firmware upgrade automatically
интересно, с кокосом сдружить ее возможно?
Re: STM32 новичку в ARM что к чему
добрый день! есть у меня процедура которая записывает несколько байтов во флешь память. когда вызываю ее программно, все записывается, а когда вызывается из обработчика прерывания , не записывается. знаю что есть два режима работы. кто-то сталкивался с таким?
-
The_D
- Встал на лапы
- Сообщения: 108
- Зарегистрирован: Пт июл 06, 2012 14:28:17
- Откуда: Россия. г.Смоленск
Re: STM32 новичку в ARM что к чему
Нет, но судя по описанию с Кокосом она дружить будет. Вопрос только как долго, тут несколько страниц назад уже разбирали глюки работы одной из китайских поделок.sa-ta писал(а):а такую поделку никто не пробовал ?
http://www.ebay.com/itm/ST-Link-V2-stli ... 565a977e87
интересно, с кокосом сдружить ее возможно?
- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: STM32 новичку в ARM что к чему
1. Какаой контроллер?drakon писал(а): есть у меня процедура которая записывает несколько байтов во флешь память. когда вызываю ее программно, все записывается, а когда вызывается из обработчика прерывания , не записывается. знаю что есть два режима работы.
2. Код процедуры покажите.
3. О каких 2-х режимах Вы говорите? Я такого не слышал
Все будет только лучше, в крайнем случае - хуже.
Re: STM32 новичку в ARM что к чему
drakon, можешь показать процедуру ?
Я тут только что начал разбираться во flash памяти вопросы возникли.
В stm32f4 что бы записать 1 байт надо весь сектор что ли стереть ???
Или сектор ещё на странницы делится ? правда этого не видать в reference_manual RM0090
http://www.st.com/web/en/resource/techn ... =auto,0,36
Я тут только что начал разбираться во flash памяти вопросы возникли.
В stm32f4 что бы записать 1 байт надо весь сектор что ли стереть ???
Или сектор ещё на странницы делится ? правда этого не видать в reference_manual RM0090
http://www.st.com/web/en/resource/techn ... =auto,0,36
- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: STM32 новичку в ARM что к чему
Да, нужно стирать весь сектор. Для хранения настроек, я обычно использую внешнюю EEPROM, типа 24Cxx, чтоб не пилить постоянно внутреннюю flash.pokk писал(а): В stm32f4 что бы записать 1 байт надо весь сектор что ли стереть ???
PS: Если у Вас стоит батарейка, для питания RTC итп, то можете воспользоваться 4 килобайтами Backup SRAM для хранения всяческих параметров.
Все будет только лучше, в крайнем случае - хуже.
Re: STM32 новичку в ARM что к чему
Хочу спросить уважаемых специалистов вот о чем - имеется ,hex для STM32F100C8. Можно ли его залить в STM32F100RBT6B и будут ли совпадать после этого одноименные пины? То есть - залить .hex и выбрать из 64 нужные 48?
Не пинайте, это как раз вопрос новичка.
Спасибо.
Не пинайте, это как раз вопрос новичка.
Спасибо.


