123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /****************************gpio.c*********************************/
- // http://microtechnics.ru/stm32-uchebnyj-kurs-gpio-porty-vvoda-vyvoda/
- //Подключаем все нужные файлы
- #include "stm32f10x.h"
- #include "stm32f10x_rcc.h"
- #include "stm32f10x_gpio.h"
- /*******************************************************************/
- //Тут будет вся инициализация всей использующейся периферии
- void initAll()
- {
- //Объявляем переменную port типа GPIO_InitTypeDef
- GPIO_InitTypeDef port;
- //Это функция из файла stm32f10x_rcc.c, включает тактирование на GPIOA
- //GPIOA сидит на шине APB2
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- //Про эту функцию напишу чуть ниже
- GPIO_StructInit(&port);
- //Заполняем поля структуры нужными значениями
- //Первый вывод – вход для обработки нажатия кнопки – PA1
- port.GPIO_Mode = GPIO_Mode_IPD;
- port.GPIO_Pin = GPIO_Pin_1;
- port.GPIO_Speed = GPIO_Speed_2MHz;
- //А про эту функцию мы уже говорили
- //Отметим только что один из параметров – указатель(!) на
- //нашу структуру
- GPIO_Init(GPIOA, &port);
- //Настраиваем вывод, на котором будет висеть диодик – PA0
- port.GPIO_Mode = GPIO_Mode_Out_PP;
- port.GPIO_Pin = GPIO_Pin_0;
- port.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOA, &port);
- }
- /*******************************************************************/
- int main()
- {
- //Объявляем переменную для хранения состояния кнопки
- uint8_t buttonState = 0;
- initAll();
- while(1)
- {
- //С помощью функции из SPL считываем из внешнего мира
- //состояние кнопки
- buttonState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);
- if (buttonState == 1)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_0);
- }
- else
- {
- GPIO_ResetBits(GPIOA, GPIO_Pin_0);
- }
- }
- }
- /****************************End of file****************************/
|