Извините, что задали такой базовый c вопрос, я новичок в программировании ARM. В настоящее время я борюсь с лабораторным упражнением.
Я должен был: С помощью встроенной кнопки (PC13) включить и выключить встроенный светодиод (PA5). Когда кнопка нажата, светодиод горит. Когда кнопка отпущена, светодиод не горит.
Код ниже может быть построен, но он не дает желаемого результата. На самом деле, ничего не происходит, когда я нажимаю sh кнопку.
#include "stm32f10x.h" // Device header
#include "stdbool.h" // For Boolean data type
#define BUTTON_RCC_GPIO RCC_APB2Periph_GPIOC
#define BUTTON_GPIO GPIOC
#define BUTTON_GPIO_PIN GPIO_Pin_13
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(BUTTON_RCC_GPIO, ENABLE);
//GPIO set up for PA5 (on board LED)
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//Timer 2 set up
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitTypeDef timerInitStructure;
timerInitStructure.TIM_Prescaler = 0;
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
timerInitStructure.TIM_Period = 0;
timerInitStructure.TIM_ClockDivision = 0;
timerInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &timerInitStructure);
TIM_Cmd(TIM2, ENABLE);
TIM_TIxExternalClockConfig(TIM2, TIM_TIxExternalCLK1Source_TI2, TIM_ICPolarity_Rising, 0);
//Enable update event for Timer2
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
NVIC_EnableIRQ(TIM2_IRQn);
while(1);
static char state = 0;
}
static char state = 0;
void TIM2_IRQHandler(void) {
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
state = 1;
} else {
GPIO_SetBits(GPIOA, GPIO_Pin_5);
state = 0;
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
Редактировать: я сильно изменил свой код, я решил вообще не использовать таймеры.
#include "stm32f10x.h" // Device header
#include "stdbool.h"
//TI2 PA1 Tim2 Ch2
#define BUTTON_RCC_GPIO RCC_APB2Periph_GPIOA
#define BUTTON_GPIO GPIOA
#define BUTTON_GPIO_PIN GPIO_Pin_13
#define L3_RCC_GPIO RCC_APB2Periph_GPIOA
#define L3_GPIO GPIOA
#define L3_PIN GPIO_Pin_5
static bool wait = true;
int main(void) {
GPIO_InitTypeDef GPIO_InitStruct;
// GPIO clock for I/O
RCC_APB2PeriphClockCmd(BUTTON_RCC_GPIO, ENABLE);
RCC_APB2PeriphClockCmd(L3_RCC_GPIO, ENABLE);
// Configure I/O for L3
GPIO_InitStruct.GPIO_Pin = L3_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(L3_GPIO, &GPIO_InitStruct);
while(1) {
if(BUTTON_GPIO_PIN==true)
{
GPIO_SetBits(L3_GPIO, L3_PIN);
}else
{
GPIO_ResetBits(L3_GPIO, L3_PIN);
}
}
}