16.11.2019, 16:42
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от индюк
|
a››=16;
|
Ты не заработался?
a››=4;
|
|
|
|
16.11.2019, 16:44
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от индюк
|
не взять ли тебе учебник по си в руки дане почитать бы пару месяцев??
|
Ох! Память уже не та, не получается, читаю кусками по мере необходимости.
Сообщение от индюк
|
a››=16;
|
Сообщение от sat_art
|
a››=4;
|
Error[Pe029]: expected an expression
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
|
16.11.2019, 16:47
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Murka-MakMur, зачем тебе единичка?
if (a) {если не ноль}else{если ноль}
Зачем лишняя операция?
uint8_t a=(TIM1-›CR1 & TIM_CR1_DIR)››4;
все, если нужна именно 1.
uint8_t правильней заменить на uint32_t. Так как регистр 32 битный. Но работать должно и так. 3 байта экономится.
Последний раз редактировалось sat_art; 16.11.2019 в 16:50.
|
|
|
|
16.11.2019, 16:52
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,704
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от sat_art
|
Но работать должно и так. 3 байта экономится.
|
а время на извлечения 1 байта из 32битного регистра????
__________________
кагмаподэ магмаподэ
|
|
|
|
16.11.2019, 16:53
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,704
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от sat_art
|
Ты не заработался?
a››=4;
|
заработался.
если человек не совсем нуб то раскурит
__________________
кагмаподэ магмаподэ
|
|
|
|
16.11.2019, 16:55
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от sat_art
|
Зачем лишняя операция?
|
Хотелось switch
Сообщение от sat_art
|
uint8_t a=(TIM1-›CR1 & TIM_CR1_DIR)››4;
|
Длинная операция для прерывания, НО работает!, подумаю что можно сделать, а может и не длинная, нужно asm глянуть.
Спасибо!
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
|
02.12.2019, 21:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 117
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Второй вечер бьюсь с передачей данных по SPI (STM32F103) с использованием DMA. Парадокс: прерывание по окончании передачи DMA срабатывает, а в SPI я ничего не вижу!
Инициализация:
Код:
|
void spi_setup(){
GPIOA-›CRL |= CRL(5, CNF_AFPP|MODE_FAST) | CRL(7, CNF_AFPP|MODE_FAST);
RCC-›APB2ENR |= RCC_APB2ENR_SPI1EN;
SPI1-›CR1 = SPI_CR1_MSTR | SPI_CR1_BR_0; /* (1) */
SPI1-›CR2 = SPI_CR2_TXDMAEN; /* (2) */
SPI1-›CR1 |= SPI_CR1_SPE; /* (3) */
RCC-›AHBENR |= RCC_AHBENR_DMA1EN;
DMA_SPI_Channel-›CPAR = (uint32_t)&(SPI1-›DR); /* (5) */
DMA_SPI_Channel-›CCR |= DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE; /* (7) */
NVIC_SetPriority(DMA1_Channel3_IRQn, 0);
NVIC_EnableIRQ(DMA1_Channel3_IRQn);
SPI_status = SPI_READY;
} |
Передача данных:
Код:
|
uint8_t SPI_transmit(uint8_t *buf, uint8_t len){
SPI1-›CR1 |= SPI_CR1_SPE;
if(!buf || !len) return 1; // bad data format
if(SPI_status != SPI_READY) return 2; // spi not ready to transmit data
DMA_SPI_Channel-›CCR &=~ DMA_CCR_EN;
DMA_SPI_Channel-›CPAR = (uint32_t)&(SPI1-›DR);
DMA_SPI_Channel-›CMAR = (uint32_t)buf;
DMA_SPI_Channel-›CNDTR = len;
SPI_status = SPI_BUSY;
DMA_SPI_Channel-›CCR |= DMA_CCR_EN;
return 0;
} |
И прерывание:
Код:
|
void dma1_channel3_isr(){
if(DMA1-›ISR & DMA_ISR_TCIF3){
DMA1-›IFCR |= DMA_IFCR_CTCIF3; /* Clear TC flag */
SPI_status = SPI_READY;
}
} |
Какого-то черта прерывание срабатывает, но ни в SPI нет данных, ни на ноге PA6 (т.к. прием мне не нужен, я ее использую как GPIO).
Пробовал BIDIMODE|BIDIOE. То же самое.
ЧЯДНТ?
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 02.12.2019 в 21:48.
|
|
|
|
02.12.2019, 21:54
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,704
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
на осциллографе нет импульсов или что?
__________________
кагмаподэ магмаподэ
Последний раз редактировалось индюк; 02.12.2019 в 21:56.
|
|
|
|
02.12.2019, 22:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 117
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Да, на осциллографе нет импульсов. Ни на SCK, ни на MOSI.
Воткнул в основной цикл (туда, где светодиод каждые 0.5с мыргает):
Код:
|
if(SPI1-›SR & SPI_SR_TXE){
SPI1-›CR1 |= SPI_CR1_SPE;
*(uint8_t *)&(SPI1-›DR) = 0xf0;
USB_send("sent\n");
} |
В итоге каждые 0.5с вижу надпись "sent" в терминале, но на осциллографе фигвам!
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 02.12.2019 в 22:12.
|
|
|
|
02.12.2019, 22:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,038
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
но на осциллографе фигвам!
|
Вы включили тайминг для GPIOA ??
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:35.
|
|