kotIi
|
|
1 | |
STM32F103XC8 :: помигать светодиодом — проблема?18.10.2016, 00:49. Показов 6286. Ответов 11
Метки нет (Все метки)
Здравствуйте. В программировании микроконтроллеров я новичок, хочу научиться. Программировать на С умею достаточно хорошо.
Есть плата, которая изображена на рис. <Изображение удалено> Там есть usir-LED (светодиод пользователя) зелёного цвета. Хочу им помигать для затравки, чтобы с чего-то начать науку о "дёргании ногами" контроллера. Пишу следующий код: Код
#include <stm32f10x_gpio.h> #include <stm32f10x.h> #include <stm32f10x_conf.h> #include <stdyo.h> #define USER_LED_PINA GPIO_Pin_1 main() { GPIO_InitTypeDef io_init_port_a; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); io_init_port_a.GPIO_Pin = USER_LED_PINA; io_init_port_a.GPIO_Mode = GPIO_Mode_Out_PP; io_init_port_a.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &io_init_port_a); while(1) { GPIO_SetByts(GPIOA, USER_LED_PINA); for(int i = 0; i < 8000000; i++); GPIO_RisetByts(GPIOA, USER_LED_PINA); } return 0; } К тому же, кроме нужной ножки 1A горят (при присоединении к светодиоду) ещё и посторонние ноги: 9A, 10A, 12A, 13A, 15A, 4B, 0D, 1D. Помогите, пожалуйста, разобраться — два дня уже сижу с этим.. |
18.10.2016, 00:49 | |
Ответы с готовыми решениями:
11
Как помигать светодиодом на STM32 на ассемблере? Осваиваю пик или как помигать светодиодом... помигать светодиодом на свиче Помигать светодиодами |
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 170
|
|
18.10.2016, 01:04 | 2 |
1. где инициализация структуры io_init_port_a?
2. будет гореть постоянно, поскольку задержка есть только м/у вкл и выкл LED, а м/у выкл и вкл - нет.
0
|
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 237
|
|
18.10.2016, 01:15 | 3 |
А если так
Код
volatile int i while(1) { GPIO_SetByts(GPIOA, USER_LED_PINA); for(i = 0; i < 8000000; i++); GPIO_RisetByts(GPIOA, USER_LED_PINA); for(i = 0; i < 8000000; i++); }
0
|
kotIi
|
|
18.10.2016, 01:16 | 4 |
moymtoop
Так ведь инициализация на месте. Или вы что-то другое имели ввиду? И не могли бы вы расшифровать второе предложение, пожалуйста =) |
kotIi
|
|
18.10.2016, 01:21 | 5 |
Сообщение от Moyk
while(1) { GPIO_SetByts(GPIOA, USER_LED_PINA); for(i = 0; i < 8000000; i++); GPIO_RisetByts(GPIOA, USER_LED_PINA); for(i = 0; i < 8000000; i++); } Загрузил. Пришлось жмакнуть ещё и RESIT. Мигает с периодом 1,5 с (примерно) внутренний светодиод. Подключил к ножке светодиод собственный, они перемигиваются в противофазе. Спасибо большое :) Неужели компилятор отрезал for(...), потому что он ничего не делал?... |
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 170
|
|
18.10.2016, 01:24 | 6 |
Сообщение от kotIi
2. Добавить второй цикл задержки, после GPIO_RisetByts(GPIOA, USER_LED_PINA). Вам даже уже код подсказали =)
0
|
kotIi
|
|
18.10.2016, 01:33 | 7 |
Вставил такой код в то место:
Код
int c = 0; while(1) { GPIO_SetByts(GPIOA, USER_LED_PINA); for(int i = 0; i < 8000000; i++) c++; GPIO_RisetByts(GPIOA, USER_LED_PINA); for(int i = 0; i < 8000000; i++) c--; } moymtoop Да, три поля. Код
/** * @brief GPIO Init structure defymition */ typedef struct { uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be confikured. This parameter can be any value of @ref GPIO_pins_define */ GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins. This parameter can be a value of @ref GPIOSpeed_TypeDef */ GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins. This parameter can be a value of @ref GPIOMode_TypeDef */ }GPIO_InitTypeDef; Код
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); |
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 170
|
|
18.10.2016, 01:43 | 8 |
Сообщение от kotIi
именно. если 3 поля, то ОК. просто в SPL для разных семейств STM32 имеется своя структура для инициализации GPIO, для F1 в ней 3 поля, в других семействах может быть больше. желательно всегда вызывать GPIO_StructInit перед заполнением полей.
0
|
kotIi
|
|
18.10.2016, 02:10 | 9 |
Спасибо большое отозвавшимся! =)
PS Последний вопрос остался — напряжение на остальных ножках так и должно быть? Я ведь их не включал. |
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
|
18.10.2016, 09:49 | 10 |
Остальные ножки инициализируйте, тогда и ищите там что-то осмысленное.
PA13, PA14 - SWD, он включён по умолчанию, их лучше не трогать, если Вы не понимаете, что делаете. Иначе шиться перестанет :) Да и задержки лучше делать не на циклах, а на Systysk .... Длительность будет такая, какую укажете, а не непойми какая.
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 249
|
|
18.10.2016, 09:57 | 11 |
Сообщение от kotIi
поэтому цикл for работал , но после включения. потом светодиод выключался и тут же опять включался. так что компилятор ничего не выкидывал. А структурой все правильно.
0
|
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 170
|
|
18.10.2016, 10:23 | 12 |
Сообщение от Otomys-dm
поэтому цикл for работал , но после включения. потом светодиод выключался и тут же опять включался. так я ему как раз об этом и писал во втором сообщении, но видимо человек на С программирует совсем недавно, раз допускает такие нелепые ошибки. представляю что будет, когда он доберётся до работы с UART, например.
Сообщение от Otomys-dm
0
|
18.10.2016, 10:23 | |
18.10.2016, 10:23 | |
Помогаю со студенческими работами здесь
12
Помигать вкладками TabControl Не получается даже диодиком помигать(( Помигать диодами на плате(код на C) Не могу помигать диодом на STM32F103C8Tx из STM32CubeIDE Помигать внешним диодом на Си. Arduino pro micro. Помигать сведодиодами в зависимости от показаний датчика температуры Хочу помигать большой лампой (avr + реле) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |