ЛеонидК писал(а):Освоишь SPL и пойдешь дальше.
лучше почитать вначале что люди пишут...


ЛеонидК писал(а):Освоишь SPL и пойдешь дальше.


ЛеонидК писал(а):Наглядно, то что понятно.
GPIO_ResetBits(GPIOC, GPIO_Pin_8); // Понятно и без объяснения и чтения литературы
Приведенное тобой я понимаю и пользуюсь сам, но это совсем не очевидно.
Твои рассуждения не более чем надувание щек.
oleg110592 писал(а):лучше почитать вначале что люди пишут...
Код: Выделить всё
#include "stm32f10x_conf.h"
void Delay(volatile uint32_t nCount);
GPIO_InitTypeDef GPIO_InitStructure;
void init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; // использовать выводы PC8 и PC9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // на выход
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //задаем номер вывода, если кнопка подключена, например к 6 порту, то пишем GPIO_Pin_6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //порт будет работать как цифровой вход с подтяжкой к земле
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
volatile int main(void)
{
init();
while(1)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_9,Bit_SET); // включить зеленый светодиод, подключенный к Led PC9
if(GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0 )// Если нажата кнопка PA0
{
GPIO_WriteBit(GPIOC,GPIO_Pin_8,Bit_SET);// включить синий светодиод, подключенный к Led PC8
}
else
{
GPIO_ResetBits(GPIOC, GPIO_Pin_8); // погасить синий светодиод, подключенный к Led PC8
}
Delay(2000000);
}
}
//-------
void Delay(volatile uint32_t nCount)
{
for (; nCount > 0; nCount--);
}karidumo писал(а):А код так и не заработал....
Код: Выделить всё
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
ЛеонидК писал(а):karidumo!
А что не работает? Светодиоды не переключаются? А окончательный код какой?
Код компилируется? Чем Вы загружаете? Как запускаете?
Если это не знать, помочь Вам никто не сможет. Получается: ”поди туда, не знаю куда...”
Код: Выделить всё
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;oleg110592 писал(а):то ж самое без SPL и с учетом рекомендаций выше - точно так же работает:Код: Выделить всё
#include "stm32f10x.h"
#define LED_BLUE_ON (GPIOC->BSRR = GPIO_BSRR_BS8)
#define LED_BLUE_OFF (GPIOC->BSRR = GPIO_BSRR_BR8)
#define LED_GREEN_ON (GPIOC->BSRR = GPIO_BSRR_BS9)
#define LED_GREEN_OFF (GPIOC->BSRR = GPIO_BSRR_BR9)
#define BUTTON (GPIOA->IDR & GPIO_IDR_IDR0)
void init() // инициализация
{
// Выставляем тактирование в APB2
RCC->APB2ENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA;
// Конфигурируем CRH и CRL регистры.
GPIOC->CRH &= ~(GPIO_CRH_CNF8 | GPIO_CRH_CNF9); // Режим 00 - output Push-Pull
GPIOC->CRH |= (GPIO_CRH_MODE8_1 | GPIO_CRH_MODE9_1); //выход, 2MHz
}
void delay(unsigned long p) // задержка
{
while(p>0){p--;}
}
int main(void)
{
init(); // инициализация
while(1) // в бесконечном цикле крутиться программа
{
if(BUTTON)// Если нажата кнопка PA0
{
LED_GREEN_ON; // включить зеленый светодиод, подключенный к Led PC9
}
else
{
LED_GREEN_OFF;// погасить зеленый светодиод, подключенный к Led PC9
}
LED_BLUE_ON; // включить синий светодиод, подключенный к Led PC8
delay(2000000);
LED_BLUE_OFF; // погасить синий светодиод, подключенный к Led PC8
delay(2000000);
}
}
размер программы:
Program Size: Code=468 RO-data=304 RW-data=0 ZI-data=1024
с использованием SPL размер был:
Program Size: Code=728 RO-data=340 RW-data=4 ZI-data=1028
ЛеонидК писал(а):.....
// #define LED_BLUE_ON (GPIOC->BSRR = GPIO_BSRR_BS8)
// #define LED_BLUE_OFF (GPIOC->BSRR = GPIO_BSRR_BR8) //не нужно устанавливать весь регистр
// устанавливая бит 8 также установишь и бит 9 и наоборот
ЛеонидК писал(а):GPIOC->BSRR = GPIO_BSRR_BS8 меняет весь регистр
