CODE
#include "stm32f30x.h" // Device header
#define LED_ON() GPIO_SetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_1
4|GPIO_Pin_15)
#define LED_OFF() GPIO_ResetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_1
4|GPIO_Pin_15)
//-------------------------
#define RED_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_9|GPIO_Pin_13)
#define RED_ON() GPIO_SetBits(GPIOE, GPIO_Pin_9|GPIO_Pin_13)
//-------------------------
#define BLUE_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_8|GPIO_Pin_12)
#define BLUE_ON() GPIO_SetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_12)
//--------------------------
#define GREEN_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_11|GPIO_Pin_15)
#define GREEN_ON() GPIO_SetBits(GPIOE, GPIO_Pin_11|GPIO_Pin_15)
//--------------------------
#define ORANGE_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_10|GPIO_Pin_14)
#define ORANGE_ON() GPIO_SetBits(GPIOE, GPIO_Pin_10|GPIO_Pin_14)
//--------------------------
static volatile uint16_t msTick= 0;
void SisTick_Handler(void)
{
msTick++;
}
void delay_ms(uint16_t ms)
{
uint16_t startTicks;
startTicks = msTick;
while((msTick - startTicks)< ms);
}
void LEDs_ini(void)
{
GPIO_InitTypeDef GPIO_InitType_LED;
//RCC_AHBPeriph_GPIOE
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE,ENABLE);
GPIO_InitType_LED.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_1
4|GPIO_Pin_15;
GPIO_InitType_LED.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitType_LED.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_InitType_LED.GPIO_OType = GPIO_OType_PP;
GPIO_InitType_LED.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitType_LED);
}
int main(void)
{
SysTick_Config(SystemCoreClock/1000);
// uint32_t i;
LEDs_ini();
while(1)
{
RED_ON();
delay_ms(100);
RED_OFF();
delay_ms(100);
}
}
Выполняет только функция RED_ON(), соответственно диоды не моргают. Пробовал вариант:#define LED_ON() GPIO_SetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_1
4|GPIO_Pin_15)
#define LED_OFF() GPIO_ResetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_1
4|GPIO_Pin_15)
//-------------------------
#define RED_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_9|GPIO_Pin_13)
#define RED_ON() GPIO_SetBits(GPIOE, GPIO_Pin_9|GPIO_Pin_13)
//-------------------------
#define BLUE_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_8|GPIO_Pin_12)
#define BLUE_ON() GPIO_SetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_12)
//--------------------------
#define GREEN_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_11|GPIO_Pin_15)
#define GREEN_ON() GPIO_SetBits(GPIOE, GPIO_Pin_11|GPIO_Pin_15)
//--------------------------
#define ORANGE_OFF() GPIO_ResetBits (GPIOE, GPIO_Pin_10|GPIO_Pin_14)
#define ORANGE_ON() GPIO_SetBits(GPIOE, GPIO_Pin_10|GPIO_Pin_14)
//--------------------------
static volatile uint16_t msTick= 0;
void SisTick_Handler(void)
{
msTick++;
}
void delay_ms(uint16_t ms)
{
uint16_t startTicks;
startTicks = msTick;
while((msTick - startTicks)< ms);
}
void LEDs_ini(void)
{
GPIO_InitTypeDef GPIO_InitType_LED;
//RCC_AHBPeriph_GPIOE
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE,ENABLE);
GPIO_InitType_LED.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_1
4|GPIO_Pin_15;
GPIO_InitType_LED.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitType_LED.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_InitType_LED.GPIO_OType = GPIO_OType_PP;
GPIO_InitType_LED.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitType_LED);
}
int main(void)
{
SysTick_Config(SystemCoreClock/1000);
// uint32_t i;
LEDs_ini();
while(1)
{
RED_ON();
delay_ms(100);
RED_OFF();
delay_ms(100);
}
}
вместо:
Код
static volatile uint16_t msTick= 0;
void SisTick_Handler(void)
{
msTick++;
}
void delay_ms(uint16_t ms)
{
uint16_t startTicks;
startTicks = msTick;
while((msTick - startTicks)< ms);
}
делать черезvoid SisTick_Handler(void)
{
msTick++;
}
void delay_ms(uint16_t ms)
{
uint16_t startTicks;
startTicks = msTick;
while((msTick - startTicks)< ms);
}
Код
uint16_t delay_count = 0;
void SysTick_Handler(void)
{
if(delay_count > 0)
{
delay_count--;
}
}
void delay_ms(uint16_t delay_temp)
{
delay_count = delay_temp;
while(delay_count){}
}
Keil выдает ошибку:void SysTick_Handler(void)
{
if(delay_count > 0)
{
delay_count--;
}
}
void delay_ms(uint16_t delay_temp)
{
delay_count = delay_temp;
while(delay_count){}
}
Цитата
..\Objects\project2.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by hal_cm4.o and main.o).
Где находятся (by hal_cm4.o and main.o) я не нашел. Помогите пожалуйста разобраться новичку с прерываниями