#include "stm32f10x.h"
#include "eval.h"
#include "SysTickDelay.h"
#include <stdio.h>
/* Private typedef -----------------------------------------------------------*/
typedef enum { FAILED = 0, PASSED = !FAILED} TestStatus;
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
#define countof(a) (sizeof(a) / sizeof(*(a)))
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void)
{
STM_EVAL_LEDInit(LED1);
STM_EVAL_LEDInit(LED2);
STM_EVAL_LEDInit(LED3);
STM_EVAL_LEDInit(LED4);
}
//系统中断管理
void NVIC_Configuration(void)
{
//NVIC_InitTypeDef NVIC_InitStructure;
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置优先级分组:先占优先级0位,从优先级4位
//设置向量表的位置和偏移
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //向量表位于RAM
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //向量表位于FLASH
#endif
}
//配置系统时钟,使能各外设时钟
void RCC_Configuration(void)
{
SystemInit();
}
//配置所有外设
void Init_All_Periph(void)
{
RCC_Configuration();
NVIC_Configuration();
GPIO_Configuration();
}
u8 KEY_Scan(void)
{
static u8 key_up=1;//按键按松开标志
if(key_up&&((STM_EVAL_PBGetState(USER_BUTTOM) == 0x00)||(STM_EVAL_PBGetState(Anti_Tamper) == 0x00)||(STM_EVAL_PBGetState(WAKE_UP) == 0x01)))
{
delay_ms(10);//去抖动
key_up=0;
if (STM_EVAL_PBGetState(USER_BUTTOM) == 0x00) //按键按下:低电平有效
{
return 1;
}
if (STM_EVAL_PBGetState(Anti_Tamper) == 0x00) //按键按下:低电平有效
{
return 2;
}
if (STM_EVAL_PBGetState(WAKE_UP) == 0x01) //按键按下:高电平有效
{
return 3;
}
}
else if((STM_EVAL_PBGetState(USER_BUTTOM) == 0x01)&&(STM_EVAL_PBGetState(Anti_Tamper) == 0x01)&&(STM_EVAL_PBGetState(WAKE_UP) == 0x00)) key_up=1;
return 0;// 无按键按下
}
int main(void)
{
u8 Key_Vlaue;
Init_All_Periph();
SysTick_Initaize();
STM_EVAL_LEDOff(LED1);
STM_EVAL_LEDOff(LED2);
STM_EVAL_LEDOff(LED3);
STM_EVAL_LEDOff(LED4);
while(1)
{
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //SWJ完全失能(JTAG+SW-DP)
STM_EVAL_PBInit(USER_BUTTOM, Mode_GPIO); //设置按键GPIO属性
STM_EVAL_PBInit(Anti_Tamper, Mode_GPIO); //设置按键GPIO属性
STM_EVAL_PBInit(WAKE_UP, Mode_GPIO); //设置按键GPIO属性
Key_Vlaue=KEY_Scan();//得到键值
if(Key_Vlaue)
{
switch(Key_Vlaue)
{
case 1:
STM_EVAL_LEDToggle(LED1);
break;
case 2:
STM_EVAL_LEDToggle(LED2);
break;
case 3:
STM_EVAL_LEDToggle(LED1);
STM_EVAL_LEDToggle(LED2);
STM_EVAL_LEDToggle(LED3);
STM_EVAL_LEDToggle(LED4);
break;
}
}
}
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
按键控制LED