ART_ME

STM32 для чайника

899 сообщений в этой теме

mail_robot    1 166

ну подковать язык и прописать. У вас в функции указатель на пустой тип приводится к конкретному типу. Надо посмотреть доку на компилятор и почитать как это должно происходить по его мнению. Возможно это поможет. Дока на компилятор обычно лежит гдето в папках среды разработки, если он встроен. Понятно что на идише, поэтому придется чуть поднапрячься.

Я обычно таких сложностей стараюсь избегать. Чем проще код, тем он понятнее и меньше багов

возможно вместо этой ерунды

reinterpret_cast<const uint8_t*>(buf);

прокатит простое явное приведение типа

(uint8_t*)buf;

дуриновски обьектный код это жопа полная. Старайтесь его избегать

Изменено пользователем mail_robot

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00

Вопрос такой, есть модуль у которого SPI 8МГц, к нему хочу прикинуть СТМ32, при максимальной частоте тактирования СТМ32 72МГц, я могу поделить частоту для тактирования SPI либо на 4,5МГц, либо на 9Мгц, так вот мне настроить частоту тактирования SPI на 4,5Мгц, или на 9МГц? Или частота тактирования модуля если 8МГц, и если я не настрою частоту тактирования SPI на СТМ32 на 8МГц, (а на СТМ32  на 8МГц никак не настроишь, как не менял делители, что основной шины что APB2, всеравно делиться на 4,5МГц, или на 9МГц), я не смогу с ним общаться?

Еще вопрос, какой функцией в IAR заменить функцию min? А то IAR ругается

Изменено пользователем Электронщик

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MDG_Lab    2

Здравствуйте! 

Подскажите, как настроить нужную частоту ШИМ  для STM32F103x8. (желательно в Arduino IDE)

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да тут в основном все либо через куб настраивают, либо регистрами, смысл использовать СТМ в ардуино иде

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MDG_Lab    2

в кубе настраивать здесь? 

 

2017-09-30_215006.png

Изменено пользователем MDG_Lab

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

MDG_Lab глянул только что библиотеку СТМ32, попробуй так: build.f_cpu=72000000L, или так f_cpu=72000000L, или так menu.cpu_speed=CPU Speed(MHz)  прописать после include

Нет в кубе не здесь, смотри RCC в кубе, а ты таймер смотришь для ШИМ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MDG_Lab    2

 

1 минуту назад, Электронщик сказал:

build.f_cpu

я хочу настроить частоту PWM, но не частоту CPU

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ой, не увидел). В арудино я знаю используют функцию analogWrite(номер пина ШИМ,65000),  максимальная 65000 для СТМ ширина импульса, попробуй может на СТМ работает, не забывай что ШИМ есть на определенных пинах, а для куба да то что нужно, только в счетчик пропиши, допустим 800 ну и prescaler - делитель частоты настрой 72МГц/4 допустим получаем 17МГц. 800 получаем 21кГц ШИМ, в пульс вбиваешь коэффициент заполнения

Ответьте на мои вопросы, пожалуйста.

Изменено пользователем Электронщик

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MDG_Lab    2

Спасибо.

Работаю с pwmWrite(P,  S).  где P - пин, он же порт, S - заполнение периода, в диапазоне 0..65535 

Но при этом не могу прописать частоту ШИМ. похоже мне нужно в раздел Arduino))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в Arduino библиотеках ШИМ в основном 490Гц, а так в ардуино прописуй регистрами частоты делителей APB1 APB2, в зависимости от таймера на котором сидит ШИМ, я так делал в ардуино для Атмег, скорее всего и для СТМ так же

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй в конце setup прописать вот так вот TIM4_PSC=4; ну или другой делитель, или в Loop если так ничего не даст, ну и номер таймера смотри под свой вывод

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
forestdozor    10

Здравствуйте! Подозреваю что сгорел порт B в STM32F100C8, написал вот такую тестовую программу:
 

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

void init (void){
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef(gpio);
    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio.GPIO_Pin = GPIO_Pin_All;
    GPIO_Init(GPIOB, &gpio);


    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio.GPIO_Pin = GPIO_Pin_All;
    GPIO_Init(GPIOA, &gpio);

}


int main(void)
{
    init();

    while(1)
    {
        GPIO_SetBits(GPIOA, GPIO_Pin_All);
        GPIO_SetBits(GPIOB, GPIO_Pin_All);
    }
}

 

По идее на всех выводах портов A и B должна быть лог.1, но на порте В везде 0. Выходит он все таки сгорел?
После стирания прошивки на выводах порта А так и остается 1. Не понимаю что происходит.

Изменено пользователем forestdozor
Не удается спрятать код под спойлер

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

forestdozor, добавь задержку после GPIO_SetBits(GPIOB, GPIO_Pin_All); , допустим HAL_Delay(1000);

И исправь

GPIO_InitTypeDef(gpio);

gpio.GPIO_Mode = GPIO_Mode_Out_PP;

gpio.GPIO_Pin = GPIO_Pin_All;, //здесь на  gpio.GPIO_Pin = GPIO_Pin_Bll;

GPIO_Init(GPIOB, &gpio);

 

gpio.GPIO_Mode = GPIO_Mode_Out_PP;

gpio.GPIO_Pin = GPIO_Pin_All;

GPIO_Init(GPIOA, &gpio);

И к тому же ты не весь порт ни А ни В включаешь, а определенный вывод

 

 

MDG_Lab попробуй либо так прописать  в конце setup  или в Loop если так ничего не даст, ну и номер таймера смотри под свой вывод

Вроде  в ардуино записываются так регистры

TIM4->PSC = 4; // делитель

TIM1->ARR = 800;//значение перезагрузки

 

Или так, как не будет ругаться пробуй :

TIM4_PSC=4; // делитель

TIM1_ARR = 800;//значение перезагрузки

При таких значениях получишь ШИМ 21кГц, ну используя функцию ардуино pwmWrite, которую ты используешь, скажи что получилось

Изменено пользователем Электронщик

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    249
2 часа назад, Электронщик сказал:

gpio.GPIO_Pin = GPIO_Pin_All;, //здесь на  gpio.GPIO_Pin = GPIO_Pin_Bll;

:lol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А то у него All по английски, не увидел))) ,  но в любом случае  у него ошибка что в инициализации, что в основном цикле, так же как и то что он якобы включает весь порт, все же как пример для включения пина, раньше так писал

 GPIO_SetBits(GPIOD, GPIO_Pin_15);  

Для включения всего порта используй регистр порта, там все просто, либо ищи функцию для своего компилятора, для включения порта, а так ты используешь функцию включения одного пина и хочешь включить все пины

Изменено пользователем Электронщик

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
forestdozor    10

Запихнул программу практически без изменений на платке Discovery с stm32f3, там все хорошо, напряжение есть на выводах портов А и В, а вот с этой МК по прежнему все глухо.
Хотя и добавил уже задержку, и подкорректиовал код. Видимо кирдык stmке, жаль...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Что ты на порт В то грузил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
forestdozor    10

Я уже все звонил,  оно с самого начала как-то отказалось работать. Сначала грешил на программатор, потом на прошивку, но когда даже тестовая не заработала пришел сюда...
В нагрузке был дисплей Nokia 5510 из этого проекта: https://ut5qbc.blogspot.com/2016/10/si5351.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос такой, в ардуино прописал для библиотеки радиомодуля nrf24,  используя стандартную функцию SPI.transfer стандартной библиотеки  SPI, команда записи регистра адрес 0x20,  регистр маски по адресу 0x1F и сам регистр радиомодуля( переменная reg4) в который мы пишем то что нам нужно

SPI.transfer (0x20|(0x1F & reg4));
SPI.transfer(value);// данные в регистр reg4, это мы пока не рассматриваем, это чтобы было понятно

 

А в IAR, я не пойму как правильно отправлять это как три байта, или же как один ведь (0x20|(0x1F & reg4)); это по сути (0x20+(0x1F * reg4)); а значить один байт и отправлять так:

void  SPI_transfer( uint8_t reg4){
  SPI1->DR=(0x20|(0x1F & reg4));
  while (SPI1->SR&SPI_SR_BSY==1);  
}

Или отправлять как два байта?

void  SPI_transfer( uint8_t reg4){
  SPI1->DR=(0x20);
  while (SPI1->SR&SPI_SR_BSY==1);
  
    SPI1->DR=(0x1F & reg4 );
  while (SPI1->SR&SPI_SR_BSY==1);  
}

Или отправлять как три отдельных байта?

void  SPI_transfer( uint8_t reg4){
  SPI1->DR=(0x20);
  while (SPI1->SR&SPI_SR_BSY==1);
  
    SPI1->DR=(0x1F );
  while (SPI1->SR&SPI_SR_BSY==1);  

SPI1->DR=( reg4 );
  while (SPI1->SR&SPI_SR_BSY==1);  
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Уже глянул лабу ардуино отправляется как один байт, не пеойму тогда почему лаба которую написал на Атмеге работает, на STM как всегда нужно что-то допиливать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MDG_Lab    2
В 01.10.2017 в 00:23, Электронщик сказал:

 

При таких значениях получишь ШИМ 21кГц, ну используя функцию ардуино pwmWrite, которую ты используешь, скажи что получилось

Как испробую обязательно отпишу. Сейчас просто нет возможность замерить нормально частоту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
LexSancho    5

добрый день!
подскажите, как настроить дебагер в кейле, чтоб работал логический анализатор. и вообще поддерживает ли st link v2 данные вещи?

у меня плата ф407 дискавери, кеил 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...