Цитата(Сергей Борщ @ Nov 7 2013, 14:43)

Кто-нибудь может объяснить, что должна делать вот эта строка?
Код
GPIO_WriteBit (GPIOB,GPIO_Pin_10, Bit_RESET);
Так я думал сбрасывать бит нажатия кнопки.
Но не получилось.
Цитата(igorle @ Nov 7 2013, 14:39)

Код
int is_pressed = 0;
while(1)
{
//Если нажатa кнопка...
if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1)
{
/* Защита от дребезга */
if (is_pressed < 200 && is_pressed++ != 100 )
Start();
GPIO_WriteBit (GPIOB,GPIO_Pin_10, Bit_RESET);
}
else
is_pressed = 0;
...
sleep(1);
}
Говорит что функция sleep() задана неявно
Видимо без этой функции работать не будет.
А как можно обрабатывать нажатие не через цикл?
Заодно прилагаю код полностью.
Код
//Не забываем подключить заголовочный файл с описание регистров микроконтроллера
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
static __IO uint32_t TimingDelay;
void Delay_ms(__IO uint32_t nTime);//обьявляем функцию отсчета времени
void Start (void); //обьявляем функцию начала работы мотора
unsigned int Time = 1000;//переменная хранящая время задержки
//Наша главная функция
void main(void)
{
SysTick_Config(24000);
//Разрешаем тактирование шины порта B
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//Объявляем структуру для настройки порта
GPIO_InitTypeDef GPIO_Buttons;
//Заполняем структуру начальными значениями
GPIO_StructInit(&GPIO_Buttons);
/* Запишем в поле GPIO_Pin структуры GPIO_Init_struct номер вывода порта, который мы будем настраивать далее */
GPIO_Buttons.GPIO_Pin = (GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12);
// Подобным образом заполним поля GPIO_Speed и GPIO_Mode
GPIO_Buttons.GPIO_Speed= GPIO_Speed_2MHz;
GPIO_Buttons.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//Передаем заполненную структуру, для выполнения действий по настройке регистров
GPIO_Init(GPIOB, &GPIO_Buttons);
//Разрешаем тактирование шины порта C
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//Объявляем структуру для настройки порта
GPIO_InitTypeDef GPIO_Motor;
//Заполняем структуру начальными значениями
GPIO_StructInit(&GPIO_Motor);
// Настраеваем пины вывода управления мотором
GPIO_Motor.GPIO_Pin = (GPIO_Pin_8 | GPIO_Pin_9);
GPIO_Motor.GPIO_Speed= GPIO_Speed_2MHz;
GPIO_Motor.GPIO_Mode = GPIO_Mode_Out_PP;
// Передаем заполненую структуру, для выполнения действий по настройке регистров
GPIO_Init(GPIOC, &GPIO_Motor);
int is_pressed = 0;
while(1)
{
//Если нажатa кнопка...
if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1)
{
/* Защита от дребезга */
if (is_pressed < 200 && is_pressed++ != 100 )
Start();
}
else
is_pressed = 0;
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==1)
{
/* Защита от дребезга */
if (is_pressed < 200 && is_pressed++ != 100 )
Time += 1000;
}
else
is_pressed = 0;
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==1)
{
/* Защита от дребезга */
if (is_pressed < 200 && is_pressed++ != 100 )
Time -= 1000;
}
else
is_pressed = 0;
}
}
void Start (void) //функция начала работы
{
GPIO_SetBits(GPIOC, GPIO_Pin_9);
Delay_ms(1000);
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
Delay_ms(Time);
GPIO_SetBits(GPIOC, GPIO_Pin_8);
Delay_ms(1000);
GPIO_ResetBits(GPIOC, GPIO_Pin_8);
}
//Функция временной задержки
void Delay_ms(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
//Обработчик прерывания системного таймера
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}