Anton01

Members
  • Публикации

    13
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

О Anton01

  • Звание
    Новенький

Электроника

  • Стаж в электронике
    Не связан с электроникой
  • Оборудование
    STM32

Посетители профиля

418 просмотров профиля
  1. STM32F100RBT6B + STM32F103C8 + SPI

    Добрый день пытаюсь настроить обмен сообщениями между контролерами STM32F100RBT6B(Slave) и STM32F103C8(Master) по шине SPI. Прошивка STM32F103C8(Master) #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" int main() { GPIO_InitTypeDef GPIOStructure; SPI_InitTypeDef SPIStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 ,ENABLE); GPIO_StructInit(&GPIOStructure); GPIOStructure.GPIO_Pin= GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 |GPIO_Pin_7; GPIOStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIOStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIOStructure); SPI_StructInit(&SPIStructure); SPIStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex; SPIStructure.SPI_Mode = SPI_Mode_Master; SPIStructure.SPI_DataSize = SPI_DataSize_8b; SPIStructure.SPI_CPOL = SPI_CPOL_Low; SPIStructure.SPI_CPHA = SPI_CPHA_2Edge; SPIStructure.SPI_NSS = SPI_NSS_Soft; SPIStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPIStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPIStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPIStructure); SPI_Cmd(SPI1,ENABLE); while(1) { while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); SPI_I2S_SendData(SPI1, 0x21); } return 0; } Прошивка STM32F100RBT6B(Slave) #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" uint8_t data; uint8_t needUpdate; uint8_t spi_receve() { while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); // ???? ???? ?????? ??????? uint8_t received = SPI_I2S_ReceiveData(SPI1); return received; } void Delay(int ms) { for (int i=0;i<ms;i++); } int main() { GPIO_InitTypeDef GPIOStructure; SPI_InitTypeDef SPIStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 ,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_StructInit(&GPIOStructure); GPIOStructure.GPIO_Pin= GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 |GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; GPIOStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIOStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIOStructure); GPIOStructure.GPIO_Pin= GPIO_Pin_10 | GPIO_Pin_11; GPIOStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIOStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIOStructure); SPI_StructInit(&SPIStructure); SPIStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex; SPIStructure.SPI_Mode = SPI_Mode_Slave; SPIStructure.SPI_DataSize = SPI_DataSize_8b; SPIStructure.SPI_CPOL = SPI_CPOL_Low; SPIStructure.SPI_CPHA = SPI_CPHA_2Edge; SPIStructure.SPI_NSS = SPI_NSS_Soft; SPIStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPIStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPIStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPIStructure); SPI_Cmd(SPI1,ENABLE); while(1) { Delay(1000); data = spi_receve(); GPIO_ResetBits(GPIOC, GPIO_Pin_10 | GPIO_Pin_11); if (data == 0x21) { GPIO_SetBits(GPIOC, GPIO_Pin_10); } if (data == 0x22) { GPIO_SetBits(GPIOC, GPIO_Pin_11); } needUpdate = 0; } return 0; } Распиновка: PA7->PA7(MOSI), PA6->PA6(MISO), PA5->PA5(SCK), PA4->PA4(NSS) Снимок анализатора прикрепил. Но ничего не работае, Slave получает всякий мусор....., но не значение 0x21. Я скорее всего делаю какие-то базовые ошибки, но не могу найти что не так. Буду благодарен за посдказки. Спасибо.
  2. Помогите! Подскажите! Help!

    Добрый день, собираю блок управления чпу из готовых компонент, а именно дравера как на рисунке и блоки питания тоже как на рисунке в один корпус компьютера посредством металических винтов. Но где-то читал что так делать не рекомендуется, так как при выходе из строя блока питания могут выйти из строя также и драйвера. Стоит ли как-то изолировать данные устройства от металлического корпуса посредством ножек пластиковых или подложек разных? Спасибо.
  3. Помогите! Подскажите! Help!

    Добрый день, нашел на сайте схему счетчика гейгера в которой компоненты подписаны как: C1 32n C-EU050-025X075 C050-025X075 CAPACITOR, European symbol C2 100n C-EUC3216 C3216 CAPACITOR, European symbol C3 10n C-EU050-025X075 C050-025X075 CAPACITOR, European symbol C4 100n/630V C-EU102-064X133 C102-064X133 CAPACITOR, European symbol C5 100n C-EUC3216 C3216 CAPACITOR, European symbol Как узнать номинальное напряжение конденсатора С1, 32 нанофарада,....?
  4. Ну там два трансформатора, далее какие-то круглые штуки с медной обмоткой, что это? И что за прибор с циферблатами?
  5. Добрый день, нашел в кладовой сумку с какими-то штуками. Подскажите что это? Даже не знаю что гуглить. Спасибо!
  6. Антон. Ваш город?

  7. Хорошая идея с радио кружками, но блин походу их уже нет в живых в нашем городе. Все развалено разбито, никому не нужно.
  8. Добрый день, помогите идентифицировать что за приемник на втором фото за коричневыми часами. Какова его стоимость? Есть ли какие-то ценные вещи на втором фото? Или можно смело все в металлолом? Что за агрегат на 3-ем фото? Какова его цена? Спасибо.
  9. STM32 UART Receive string

    Добрый день, подскажите хочу отправить с терминала не один символ (например :"?"), а целую строку(например "Hello world!"). Но как её считать? Спасибо. #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" void send_to_uart(uint8_t data) { while(!(USART1->SR & USART_SR_TC)); USART1->DR=data; } void send_str(char * string) { uint8_t i=0; while(string[i]) { send_to_uart(string[i]); i++; } send_to_uart('\r'); send_to_uart('\n'); } int main(void) { uint8_t uart_data; uint16_t led; RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_InitTypeDef gpio_port; gpio_port.GPIO_Pin = 0x3FF; gpio_port.GPIO_Mode = GPIO_Mode_Out_PP; gpio_port.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB, &gpio_port); GPIOB->ODR = 0x00; gpio_port.GPIO_Pin = GPIO_Pin_10; gpio_port.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &gpio_port); gpio_port.GPIO_Pin = GPIO_Pin_9; gpio_port.GPIO_Speed = GPIO_Speed_50MHz; gpio_port.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &gpio_port); USART_InitTypeDef uart_struct; uart_struct.USART_BaudRate = 9600; uart_struct.USART_WordLength = USART_WordLength_8b; uart_struct.USART_StopBits = USART_StopBits_1; uart_struct.USART_Parity = USART_Parity_No; uart_struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; uart_struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &uart_struct); USART_Cmd(USART1, ENABLE); while (1) { if (USART1->SR & USART_SR_RXNE) { uart_data = USART1->DR; switch (uart_data) { case 'Hello world!': send_str("?"); break; case '?': send_str("Hello world!"); break; } } } }
  10. STM32 TIM2

    Использовал следующий код. #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" void Delay(unsigned int t) { unsigned int i; for (i = 0; i < t; i++) ; } int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //Включаем Таймер 2 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); GPIO_InitTypeDef PORT; // Настроим ноги со светодиодами на выход PORT.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); //Будем использовать альтернативный режим а не обычный GPIO PORT.GPIO_Mode = GPIO_Mode_AF_PP; PORT.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &PORT); //Разрешаем таймеру использовать ноги PA1,PA2,PA3 для ШИМа TIM2->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E); // Для всех трех каналов задаем инверсный ШИМ. TIM2->CCMR1 |= (TIM_CCMR1_OC2M_0 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2); TIM2->CCMR2 |= (TIM_CCMR2_OC3M_0 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2); //Запускаем таймер! TIM2->CR1 |= TIM_CR1_CEN; while (1) { TIM2->CCR1 = 60000; TIM2->CCR2 = 0; TIM2->CCR3 = 60000; TIM2->CCR4 = 0; Delay(60000); TIM2->CCR1 = 60000; TIM2->CCR2 = 0; TIM2->CCR3 = 0; TIM2->CCR4 = 0; Delay(60000); TIM2->CCR1 = 60000; TIM2->CCR2 = 0; TIM2->CCR3 = 0; TIM2->CCR4 = 60000; Delay(60000); TIM2->CCR1 = 0; TIM2->CCR2 = 0; TIM2->CCR3 = 0; TIM2->CCR4 = 60000; Delay(60000); TIM2->CCR1 = 0; TIM2->CCR2 = 60000; TIM2->CCR3 = 0; TIM2->CCR4 = 60000; Delay(60000); TIM2->CCR1 = 0; TIM2->CCR2 = 60000; TIM2->CCR3 = 0; TIM2->CCR4 = 0; Delay(60000); TIM2->CCR1 = 0; TIM2->CCR2 = 60000; TIM2->CCR3 = 60000; TIM2->CCR4 = 0; Delay(60000); TIM2->CCR1 = 0; TIM2->CCR2 = 0; TIM2->CCR3 = 60000; TIM2->CCR4 = 0; } } Вот что получилось: Подскажите что я не так делаю. В каком направление двигаться дальше? Спасибо.
  11. STM32 TIM2

    Добрый день, есть следующий код он отлично вращает моторчик. #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" void Delay(unsigned int t) { unsigned int i; for (i=0;i<t;i++); } void GPIOD_Initialize(){ GPIO_InitTypeDef GPIOC_Stepper; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIOC_Stepper.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7; GPIOC_Stepper.GPIO_Mode=GPIO_Mode_Out_PP; GPIOC_Stepper.GPIO_Speed= GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIOC_Stepper); } int main(void) { const int time = 10000; GPIOD_Initialize(); while(1) { GPIO_Write(GPIOC,GPIO_Pin_5); Delay(time); GPIO_Write(GPIOC,GPIO_Pin_5| GPIO_Pin_3); Delay(time); GPIO_Write(GPIOC,GPIO_Pin_3); Delay(time); GPIO_Write(GPIOC,GPIO_Pin_3|GPIO_Pin_7); Delay(time); GPIO_Write(GPIOC,GPIO_Pin_7); Delay(time); GPIO_Write(GPIOC,GPIO_Pin_7|GPIO_Pin_1); Delay(time); GPIO_Write(GPIOC,GPIO_Pin_1); Delay(time); GPIO_Write(GPIOC,GPIO_Pin_1|GPIO_Pin_5); Delay(time); } } Но хочу переделать данный код через таймер TIM2. #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" void Delay(unsigned int t) { unsigned int i; for (i = 0; i < t; i++) ; } int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //Включаем Таймер 2 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); GPIO_InitTypeDef PORT; // Настроим ноги со светодиодами на выход PORT.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); //Будем использовать альтернативный режим а не обычный GPIO PORT.GPIO_Mode = GPIO_Mode_AF_PP; PORT.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &PORT); //Разрешаем таймеру использовать ноги PA1,PA2,PA3 для ШИМа TIM2->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E); // Для всех трех каналов задаем инверсный ШИМ. TIM2->CCMR1 |= (TIM_CCMR1_OC2M_0 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2); TIM2->CCMR2 |= (TIM_CCMR2_OC3M_0 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2); //Запускаем таймер! TIM2->CR1 |= TIM_CR1_CEN; while (1) { TIM2->CCR1 = 20000; TIM2->CCR3 = 20000; Delay(10000); TIM2->CCR1 = 20000; Delay(10000); TIM2->CCR4 = 20000; TIM2->CCR1 = 20000; Delay(10000); TIM2->CCR4 = 20000; Delay(10000); TIM2->CCR2 = 20000; TIM2->CCR4 = 20000; Delay(10000); TIM2->CCR2 = 20000; Delay(10000); TIM2->CCR3 = 20000; TIM2->CCR2 = 20000; Delay(10000); TIM2->CCR3 = 20000; } } Проблема в том что когда прошиваю контроллер вторым кодом, мотор пищит но не вращается. Мне кажется что у меня неверно генерируется ШИМ. Но как определить без осцилографа какой он в первом варианте а какой во втором?
  12. Добрый день для самообучения решил крутить двигатель 28byj48, с помощью STM32 через L293D. Схема двигателя http://robocraft.ru/...t/28BYJ-48.pdf. Подключение двигателя к L293D: Вывод двигателя 1 подключен к output 1. Вывод двигателя 3 подключен к output 2. Вывод двигателя 4 подключен к output 3. Вывод двигателя 2 подключен к output 4. Подключение STM32 к L293D: PC1 подключен к input 1. PC3 подключен к input 2. PC5 подключен к input 3. PC7 подключен к input 4. Выводы Enable 1 и Enable 2,Vs,Vss драйвера подключены к 5v.Ну соответственно земля есть. Прошиваю контроллер следующим кодом: #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" void Delay(unsigned int t) { unsigned int i; for (i=0;i<t;i++); } void GPIOD_Initialize(){ GPIO_InitTypeDef GPIOC_Stepper; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIOC_Stepper.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7; GPIOC_Stepper.GPIO_Mode=GPIO_Mode_Out_PP; GPIOC_Stepper.GPIO_Speed= GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIOC_Stepper); } int main(void) { GPIOD_Initialize(); while(1) { GPIO_Write(GPIOC,GPIO_Pin_1); Delay(100); GPIO_Write(GPIOC,GPIO_Pin_1| GPIO_Pin_3); Delay(100); GPIO_Write(GPIOC,GPIO_Pin_3); Delay(100); GPIO_Write(GPIOC,GPIO_Pin_5|GPIO_Pin_3); Delay(100); GPIO_Write(GPIOC,GPIO_Pin_5); Delay(100); GPIO_Write(GPIOC,GPIO_Pin_5|GPIO_Pin_7); Delay(100); GPIO_Write(GPIOC,GPIO_Pin_7); Delay(100); GPIO_Write(GPIOC,GPIO_Pin_7|GPIO_Pin_1); Delay(100); } } В итоге моторчик при подаче тока начинает пищать но не крутится. Уважаемый форумчане подскажите что я делаю не так? Спасибо.