Jump to content

atrel

Members
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Обычный

About atrel

  • Rank
    Новенький

Контакты

  • ICQ
    425401482

Информация

  • Пол
    Мужчина
  • Интересы
    ARM, СВЧ компоненты, Антенны

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    СВЧ
  • Оборудование
    hakko
    rohde & schwarz
  1. AC-DC сетевой преобразователь P вых: 200 Вт; Выход: 48 В; Вход: 110/220В авто; Стабилизация: напряжение; Конструктив: в кожухе Есть 2 штуки. Цена одной 3200. Не использовался. Продаю за ненадобностью. Если сразу два то по 3100 штука.
  2. Вопрос более конкретный. // Обработчик прерывания TIM6_DAC void TIM6_DAC_IRQHandler(void) { TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF GPIOC->ODR^=(GPIO_Pin_9 | GPIO_Pin_8); //Инвертируем состояние светодиодов } На что реагирует данный отрезок кода? здесь Конечно понятно, что на прерывание. (Я тоже Капитан Очевидночть). Но чем обусловленно оно: значением бита в регистре? (Каком?, может быть TIMx_SR ?)
  3. Думаю проблему атомарных операций следует пока опустить. Ибо возник вопрос о прерываниях. Решил помигать диодом с определённой точностью void main() { //------------------------------------------------------- //Включаем тактирование //RCC AHB 0x40021000 //Порт C, APB2 0x018 value IOPCEN 0x10 //Таймер 6, APB1 0x01c value TIM6EN 0x10 *(unsigned long*)(0x40021018) |= 0x10; *(unsigned long*)(0x4002101c) |= 0x10; //------------------------------------------------------- //Настройка выхода Порт C 8, 9 //GPIOC 0x40011000 //CRH 0x04 // 8, 9 Пуш-пул 2 МГц value 0x22 *(unsigned long*)(0x40011004) = 0x22; //------------------------------------------------------- //Настройка таймера 6 //TIM6 0x40001000 //TIM6_PSC 0x28 Делитель на 24000 ( 0 - делим на единицу) //TIM6_ARR 0x2c Точка начала прерывания 1000 //TIM6_DIER 0x0c Разрешаем прерывание от таймера value UIE 0x01 //TIM6_CR1 0x00 Старт value CEN 0x01 *(unsigned long*)(0x40001028) = 0x9c3f; *(unsigned long*)(0x4000102с) = 0x3e8; *(unsigned long*)(0x4000100с) = 0x01; *(unsigned long*)(0x40001000) = 0x01; //------------------------------------------------------- while(1); } (Это копия данного кода) , но как определить случилось прерывание или нет. Где его искать? В оригинале легко и просто обращаются к обработчику. Однако, непонятно откуда у него ноги растут. Буду рад вашей помощи.
  4. Теперь, вопрос стоит об атомарных операциях. 1. Как их делать? 2. Их преимущество? 3. Почему во многих источниках говорится об группах битов, а не единицах? Всегда рад Вашему участию.
  5. Короче, работает так void main() { //Enable port C clocking *(unsigned long*)(0x40021018) |= 0x10; /*0x40021000 - адрес регистра AHB, 0x018 - добавка для APB2, 0x10 значение для IOPCEN */ //little delay for GPIOC get ready volatile unsigned long i=0; i++; i++; i++; i=0; //режим работы C 8 *(unsigned long*)(0x40011004) = 0x02; /* 0x40011000 адрес GPIOC , 0x04 - адрес CRH , 0x10 - значение для 8 пина пуш-пул, 2 МГц */ //Turn LED ON! //*(unsigned long*)(0x4001100c) = 0xffff; *(unsigned long*)(0x40011010) = 0x100; /* 0x40011000 адрес GPIOC , 0x10 - адрес BSRR, 0x100 - значение для 8 пина */ while(1); } Всё дело было в неправильном значении в CRH и просто = вместо |=.
  6. Вам Не надо. А Мне Интерестно! Поэтому я и ищу соучастников. К стати, работаю я в кокосе. Может он неможет так? (ошибок при компиляции не выдаёт).
  7. mail_robot, спасибо за ответ. Но, хотелось бы, для общего развития и понимания работы данного девайса действовать через регистры. К сожалению, смотря в библиотеки к стмке, я так и непонял как они, там, работают, поэтому пришлось заниматься сочинительством. Буду рад участию всех кто понял эту вундервафлю.
  8. Всем привет. Нахожусь на стадии изучения этого камня параллельно языка C, возникают вопросы на которые ищу ответ среди вас. Решил включить диодики на плате STM32VLDISCOVERY c STM32F100RB. void main() { //Enable port C clocking *(unsigned long*)(0x40021018) |= 0x10; /*0x40021000 - адрес регистра AHB, 0x018 - добавка для APB2, 0x10 значение для IOPCEN */ //little delay for GPIOC get ready volatile unsigned long i=0; i++; i++; i++; i=0; //режим работы C 8 *(unsigned long*)(0x40011004) |= 0x10; /* 0x40011000 адрес GPIOC , 0x04 - адрес CRH , 0x10 - значение для 8 пина пуш-пул, 2 МГц */ //Turn LED ON! *(unsigned long*)(0x40011010) = 0x100; /* 0x40011000 адрес GPIOC , 0x10 - адрес BSRR, 0x100 - значение для 8 пина */ while(1); } К сожалению диоды не горят. Все мои попытки как-то запустить сей процесс не помогли. Есть ли здесь ошибка? Информацию брал с сайта STM, и хабра . Этот камень для меня первый. Буду благодарен за вашу помощь.
×
×
  • Create New...