Поиск по сайту

Результаты поиска по тегам 'stm'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разделы

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
    • МК для начинающих
    • AVR
    • PIC
    • STM32
    • Arduino и Raspberry Pi
    • ПЛИС
    • Другие микроконтроллеры и семейства
    • Алгоритмы
    • Программаторы и отладочные модули
    • Периферия и внешние устройства
    • Разное
  • Товары и услуги
    • Коммерческие предложения
    • Продам-Отдам, Услуги
    • Куплю
    • Уголок потребителя
    • Вакансии и разовая работа
    • Наши обзоры и тесты
  • Разное
    • Конкурсы сайта с призами
    • Сайт Паяльник и форум
    • Курилка
    • Технический английский (English)
    • Наши проекты для Android и Web
    • FAQ (Архив)
    • Личные блоги
    • Корзина
    • Вопросы с VK
  • ATX->ЛБП Переделки
  • Юмор в youtube Киловольты юмора
  • Надежность и группы продавцов Радиолюбительская доска объявлений exDIY
  • разные темы Переделки

Блоги

Нет результатов для отображения.

Нет результатов для отображения.

Местоположения

  • Пользователи форума

Группа


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Найдено 13 результатов

  1. Необходимо выводить на блок из 4 семисегментных индикаторов данные, управление лежит на двух сдвиговых регистрах: Первый хранит в себе число на вывод, второй адрес(адресует на конкретный разряд в блоке). Данные передаю через аппаратный SPI, настроенный в STM32CubeMX, но он у меня не работает. Мой алгоритм Задаю наборы для отображения на индикаторе и адресные наборы для перемещения по разрядам в блоке. uint8_t i,j = 0; uint8_t buff[8] = {1,2,3,4,5,6,7,8}; uint8_t digit[10] = { 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90, // 9 }; uint8_t chr[4] = { 0x8, 0x4, 0x2, 0x1 }; Строб необходим для начала записи данных в регистр хранения сдвигового регистра void strob(void){ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); HAL_Delay(85); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); HAL_Delay(85); } Функция передачи данных с использованием HAL функции и строба. void spi_send(uint8_t *data, uint8_t it){ strob(); uint8_t *d = data; for(j = 0; j <=it; j++){ d = &data[j]; HAL_SPI_Transmit ( &hspi1, d, 8, 50); } strob(); } Отправляю смешение по элементам блока семисегментного индикатора. while (1) { i++; if(i<=4){ spi_send(chr, i); } else i = 4; i = -1; s.7z Файлы с IAR проектом и CubeMX проектом инициализации. 1dsfs.7z Пример работы индикатора video_2018-07-04_00-13-42.mp4
  2. Продам транзисторы: STF12N50M2 - 4шт по 50р STF16N50M2 - 4шт по 65р STP140N6F7 - 14шт по 40р (отличная замена тем же самым IRF3205, даже лучше) IRFP4321 - 2шт по 75р (нет на фото) Микросхемы: PCM2707CPJTR - 2шт по 400р Все детали 100% оригинальные. Нахожусь в г. Новороссийск. Отправлю Почтой России. Оплата на карту СБ. Ну и самое главное - даташиты: STF12N50M2.pdf STF16N50M2.pdf STP140N6F7.pdf IRFP4321.pdf PCM2707C.pdf
  3. Дали прошивку для приборки . Надо найти теперь XPROG. Есть еще и вторая задача: изменить софт блока управления климатом на spc560d30l3. Для этого надо изучить в чем писать код для него(или заплатить чтоб написали) и загрузить новый код. я только изучаю эту тему и поэтому прошу опытных людей подсказать: могу ли я xprog`ом прошить spc560d30l3, чтобы так сказать не зря покупать xprog? или может подскажите чем ее бюджетно можно прошить.микропроцессор при этом нехотелось бы выпаивать с существующей платы
  4. Здравствуйте. Посоветуйте пожалуйста схемы программаторов для AVR и STM- универсальный не надеюсь. Имеется в наличии usbasp китайский-работает как гнилой еврей раз в неделю. Сделал PICKIT2 за 4 года ни одного отказа. usbasp может сегодня тупо отказываться работать на 3 компьютерах, на следующий день как часики прошивает 1-2 камня и опять отдыхает. Надоело.
  5. Обязанности: · Разработка радиоэлектронных и GSM-устройств: разработка схем, программирование, разводка печатных плат, разработка документации. · Программирование микроконтроллеров STM, AVR, ARM, PIC на языке С/С++ в личку или en@argument74.com
  6. stm32f103c8t6_прерывания

    Доброго! Контроллер stm32f103c8t6. Пишу настройку таймера и его прерываний, но программа зависает через несколько тиков после выхода из самой функции настройки. По коду: в главной функции пишу сразу настройку таймера и далее бесконечный цикл, до которого дело не доходит. На рисунках скрины отладки в момент зависания. void TIM_ini(void) { TIM_TimeBaseInitTypeDef UserTimStruct; NVIC_InitTypeDef UserNVIC_Structure; TIM_DeInit(TIM3); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); UserTimStruct.TIM_ClockDivision = TIM_CKD_DIV4; UserTimStruct.TIM_CounterMode = TIM_CounterMode_Up; UserTimStruct.TIM_Period = 200; UserTimStruct.TIM_Prescaler = 700-1; TIM_TimeBaseInit(TIM3, &UserTimStruct); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); TIM_Cmd(TIM3, ENABLE); UserNVIC_Structure.NVIC_IRQChannel = TIM3_IRQn; UserNVIC_Structure.NVIC_IRQChannelCmd = ENABLE; UserNVIC_Structure.NVIC_IRQChannelPreemptionPriority = 1; UserNVIC_Structure.NVIC_IRQChannelSubPriority = 1; NVIC_Init(&UserNVIC_Structure); } ,
  7. День добрый. Поставил для себя задачу создать для своего мотоцикла небольшой компьютер на базе микроконтроллера с выводом информации на дисплей. Кое-какие наработки у меня уже осуществлены и сейчас я стаю перед выбор усовершенствовать свое устройство(получилось очень громоздкая конструкция которая занимает много места и к тому же 2/3 памяти ардуины я задействовал при этом далеко не все еще впихнул) или начинать с нуля. Для начало опишу то что у меня уже есть (осуществлено на базе Ардуино уно, пока что без вывода на экран, но скетч под это у меня уже написан) и что я хочу. Функционал такой: -вольтметр (есть); -термометр (есть); -несколько режимов полуавтоматической смазки цепи (есть как автоматически включающиеся/выключающиеся режимы (считываю сигналы с датчика скорости=>пересчитываю в скорость в зависимости от скорости переключаются режимы, т.е. насос работает либо чаще либо выключается на время либо работает реже), также некоторые режимы включаются вручную с кнопки) - есть, все режимы включаются последовательно; - расчет средней скорости в пути (частично есть); - расчет среднего времени поездки (нет); -расчет расстояния (нет); - считывание данных с нескольких датчиков разного рода(цифровые и аналоговые) и вывод на дисплей(нет, параллельная задача); - вывод на дисплей, еще точно не определился с моделью, пока на примере 5110, но не уверен, нужно что-то по размеру как 5110 но хотелось побольше чем 84х84 для вставления качественных картинок). Собственно вопрос в том по какому пути идти? Оптимизировать задачу на более маленьком ардуино, типа адруино нано (а возможно и на двух) или же начинать с нуля, но тогда встает вопрос о выборе МК (тут я потратив несколько дней пока окончательно запутался) AVR, STM или PIC? Задача планируется как единичная, но хочется получить относительно компактное устройство. П.С. честно читал и искал, но т.к. я "не в теме электроники", мне нужен толчок в нужную сторону Заранее спасибо.
  8. Stm32W108

    Доброго времени суток. Заинтересовался микроконтроллерами серии STM32W108 но вот беда разводку подключение радио модуля к антенне не нашел, хотя перерыл весь нет. Может кто набросать, кто знаком с вопросом? проблема в том что я больше программист чем радиолюбитель так что расчет самому вызывает определенные трудности.
  9. Доброго времени суток. Подскажите пожалуйста полезные сайты и литературу для подробного освоения программирования микроконтроллеров линейки STM
  10. Доброе время суток. Имеется микроконтроллер STM32F103VBT6, на нём заведен ADC1 и используются 6 входных каналов на ножках PA0..PA5. Если в конфигурации установить оцифровку сигнала с пина PA0, то оцифровка проходит успешно, то же самое с пином PA1. Ситуация меняется, если пытаюсь оцифровать PA2..PA5. Считываются нули. Ниже привожу код. Просьба подсказать в чём может быть дело и как это исправить. Канал меняю в строчке ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_1Cycles5);. К примеру, ADC_Channel_2. #include "stm32f10x_rcc.h" #include "stm32f10x_adc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_usart.h" #include "misc.h" #include "delay.h" void SetupUSART(void); void send_to_uart(uint8_t data); void ADC1_2_IRQHandler(void); void Get_Temp(void); uint8_t ind1_B; uint8_t ind2_B; uint8_t ind3_B; uint8_t ind4_B; uint8_t ind5_B; uint8_t ind1_C; uint8_t ind2_C; uint8_t ind3_C; uint8_t ind4_C; uint8_t ind5_C; uint8_t ind1_D; uint8_t ind2_D; uint8_t ind3_D; uint8_t ind4_D; uint8_t ind5_D; uint8_t ind_B; static volatile uint16_t temp=0; int main(void) { SysTick_Config(8000); RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN, ENABLE); // ?? GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_USART2, DISABLE); //RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;// ?? //AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // ?? disable JTAG GPIO_InitTypeDef GPIO_InitStructure; // PORTA // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = /*GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |*/ GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); // alternative GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // PORTB // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); // output GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); // PORTC // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure); // output GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); // PORTD // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); // alternative GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); // PWM output pins GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); // PORTE // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOE, &GPIO_InitStructure); // output GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOE, &GPIO_InitStructure); SetupUSART(); // TIM4 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // Clock to PORTD for TIM4 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); // Clock to TIM4 GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); TIM4->CCER |= (TIM_CCER_CC1E|TIM_CCER_CC2E|TIM_CCER_CC3E|TIM_CCER_CC4E); // Enable all PWM outputs TIM4->CCMR1|= (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2); //Forward PWM for ch1 TIM4 TIM4->CCMR1|= (TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2); //Forward PWM for ch2 TIM4 TIM4->CCMR2|= (TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2); //Forward PWM for ch3 TIM4 TIM4->CCMR2|= (TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2); //Forward PWM for ch4 TIM4 TIM4->CR1 |= TIM_CR1_CEN; TIM4->CCR1 = 65536/5; // Duty cycle PWM1 (Avr voltage = 1.65 V) TIM4->CCR2 = 65536/4; // Duty cycle PWM2 TIM4->CCR3 = 65536/3; // Duty cycle PWM3 TIM4->CCR4 = 65536/2; // Duty cycle PWM4 // ADC RCC_ADCCLKConfig(RCC_PCLK2_Div8); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; ADC_DeInit(ADC1); ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE); NVIC_Init(&NVIC_InitStructure); ADC_Cmd(ADC1, ENABLE); //ADC_TempSensorVrefintCmd(ENABLE); ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)) { }; ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)) { }; GPIO_SetBits(GPIOE,GPIO_Pin_1); while(1) { GPIO_SetBits(GPIOC,GPIO_Pin_6); //uint8_t pa2 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2); //send_to_uart(pa2); //GPIO_SetBits(GPIOB,GPIO_Pin_4); // always 1 /*/chB GPIO_SetBits(GPIOB,GPIO_Pin_6); GPIO_SetBits(GPIOB,GPIO_Pin_4); GPIO_SetBits(GPIOB,GPIO_Pin_7); GPIO_SetBits(GPIOB,GPIO_Pin_9); GPIO_SetBits(GPIOE,GPIO_Pin_0); */ Delay_ms(500); GPIO_ResetBits(GPIOC,GPIO_Pin_6); //GPIO_ResetBits(GPIOB,GPIO_Pin_4); // always 1 /*/chB GPIO_ResetBits(GPIOB,GPIO_Pin_6); GPIO_ResetBits(GPIOB,GPIO_Pin_4); GPIO_ResetBits(GPIOB,GPIO_Pin_7); GPIO_ResetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOE,GPIO_Pin_0); */ Delay_ms(500); ind1_B = GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6); // ok ind2_B = GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_7); // ok ind3_B = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3); // ok //(?) always 0 ind4_B = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5); // ok ind5_B = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8); // ok ind1_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2); // ok ind2_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3); // ok ind3_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4); // ok ind4_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6); // ok ind5_C = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1); // ok ind1_D = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6); // ok ind2_D = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7); // ok ind3_D = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4); // ok ind4_D = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0); // ok ind5_D = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7); // ok //send_to_uart(ind1_; //send_to_uart(ind2_; //send_to_uart(ind3_; //send_to_uart(ind4_; //send_to_uart(ind5_; ind_B = 5-(ind1_B+ind2_B+ind3_B+ind4_B+ind5_; switch (ind_ { case 0: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 1: GPIO_SetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 2: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_SetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 3: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_SetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 4: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_SetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 5: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_SetBits(GPIOE,GPIO_Pin_0); // sel5_B break; } Get_Temp(); unsigned char a = temp>>4; send_to_uart(a); send_to_uart(0xFF); } } void ADC1_2_IRQHandler(void) { if (ADC_GetITStatus(ADC1, ADC_IT_EOC)) { ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); temp = ADC_GetConversionValue(ADC1); } } void Get_Temp(void) { ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_1Cycles5); ADC_SoftwareStartConvCmd(ADC1, ENABLE); } void send_to_uart(uint8_t data) { while(!(USART1->SR & USART_SR_TC)); USART1->DR=data; } void SetupUSART() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE); //RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_DeInit(USART1); USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); }
  11. Здравствуйте! Нужно программировать на МК, а опыта работы с МК нет. Очень простой для вас, но очень важный для меня вопрос. Имею: плата stm32f407vg (она же дискавери), установленная на расширяющую плату от фирмы WaveShare с названием Open407V-D. Пройдемся по моей периферии: Вай-фай модуль - 14 пинов (WaveShare wifi232 UART module) 4 инфракрасных сенсора - по 3 пина каждый, неизвестного китайского изготовителя Кард-ридер - 9 пинов (WaveShare) Ультразвуковой датчик - 4 пина (от компании Arduino) Voltage sensor - 3 пина Акселерометр от WaveShare 10DoF - 7 пинов Очевидно, что всю эту периферию мне нужно подключить к МК, да еще и так, чтобы она функционировала. К разъемам, имеющимся на расширяющей плате ничего из этого, кроме кард-ридера, не подходит. Вопрос: Как выбирать пины мк для подключения к ним периферии? (выбор у меня весьма богатый)
  12. F103C8 Передаёт 2 Байта По I2C

    Всем привет. Столкнулся с проблемой, может кто уже сталкивался с подобным, или может хоть подскажите в какую сторону смотреть. Дело вот в чём: простая тестовая программа, передранная целиком и полностью из интернета(упростил в процессе поиска глюка, потом по функциям всё разложу) передаёт число 0х44 в устройство с адресом 0х12 по I2C. Настроил тактирование контроллера, порты и сам интерфейс. Бросаю стартовый бит, нормально. Бросаю адрес, отлично. Отсылаю байт данных, а на выходе идёт 18 бит, то бишь 2 байта. В чём моя ошибка? Контроллер stm32f103C8T6. Среда - coocox. Да там ещё была загвоздка, вместо проверки на окончание передачи адреса и самого байта пришлось ставить задержки. Я знаю что это колхоз, но не смог найти какой флаг проверять. Если кто подскажет буду очень рад. Привожу код и скрин с анализатора. #include "stm32f10x_gpio.h" #include "stm32f10x_i2c.h" #include "stm32f10x_rcc.h" //******************************************************************************** unsigned char InitClk() { unsigned long int TimeOut = 10000; //Запустить HSE RCC->CR |= RCC_CR_HSEON; //Включить генератор HSE while((RCC->CR & RCC_CR_HSERDY)==0) //Ожидание готовности HSE if(TimeOut) TimeOut--; if(TimeOut==0) return 1; //Ошибка!!! Генератор HSE не запустился RCC->CR |= RCC_CR_CSSON; //Разрешить работу системы защиты сбоя HSE //Подключить систему к HSE RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала RCC->CFGR |= RCC_CFGR_SW_HSE; //Выбрать источником тактового сигнала HSE //Настроить делитель для AHB RCC->CFGR &= ~RCC_CFGR_HPRE; //Очистка битов предделителя "AHB Prescaler" RCC->CFGR |= RCC_CFGR_HPRE_DIV2; //Установить "AHB Prescaler" равным 2 return 0; //Все ok, работаем от HSE } //******************************************************************************** //Function: обработчик прерывания при сбое генератора HSE // //******************************************************************************** void NMI_Handler(void) { //Сбросить флаг системы контроля сбоя HSE if (RCC->CIR & RCC_CIR_CSSF) RCC->CIR |= RCC_CIR_CSSC; //Если контроллер здесь, значит HSE не работает //Что-то можно предпринять: перезапустить генератор, дать сигнал аврии и т.п. } //******************************************************************************** GPIO_InitTypeDef gpio; I2C_InitTypeDef i2c; /*******************************************************************/ void init_I2C1(void) {//Конфигурация I2C и портов под него GPIO_PinRemapConfig(GPIO_Remap_I2C1, DISABLE); GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; I2C_DeInit (I2C1); GPIO_DeInit(GPIOB); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = 50000; I2C_Init(I2C1, &I2C_InitStructure); I2C_Cmd(I2C1, ENABLE); } int main(void) { InitClk(); init_I2C1(); uint8_t transmissionDirection = I2C_Direction_Transmitter; uint8_t slaveAddress = 0x12; // Генерируем старт - тут все понятно ) I2C_GenerateSTART(I2C1, ENABLE); // Ждем пока взлетит нужный флаг while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, slaveAddress, transmissionDirection); uint8_t i; for(i=0;i<0x50;i++);//Задержка на время адреса uint8_t data = 0x44; I2C_SendData(I2C1, data); for(i=0;i<0x70;i++);//Задержка на время данных I2C_GenerateSTOP(I2C1, ENABLE); while(1){ } }
  13. Собственно сабж. Плата в идеальном состоянии, если нужно - фото сделаю. В комплекте модули AVR (Mega16) и STM32 (STM32F103C6T6), сама плата, дисплей WH1602, модуль AVR JTAG. Также есть платка JTAG от второй ревизии (чистая). Цена - 750 грн. СРОЧНО! Киев. В другие города отправлю Новой Почтой.