main.c
/*********************************************************************************************************
* 头文件
*********************************************************************************************************/
#include<includes.h>
/****************************
int main(void)
{
BSP_Init ();/*系统初始化*/
USART_OUT(USART1," 恭喜你 :开机成功\r\n");/**开机字符*/
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
while(1)
{
while_1();
}
}
****************************************************************************** 函数声明*********************************************************************************************************/extern void BSP_Init (void); /*系统配置*/extern void while_1(void); /*转入函数*/extern int flag;/***printf函数 串口输出*不要删除**/void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...);char *itoa(int value, char *string, int radix);int fputc(int ch,FILE *f);stm32f10x_it.c
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line11)!=RESET)
{
if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)) //判断是A~G哪个被触发
{
GPIO_ToggleBits(GPIOB,GPIO_Pin_0);
}
while(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)); //松手检测
}
EXTI_ClearITPendingBit(EXTI_Line11); //清除EXTI0线路挂起位
}
bsp.c 配置
#include<includes.h>
/*********************************************************************************************************
* 全局变量
*********************************************************************************************************/
/*********************************************************************************************************
* 函数声明
*********************************************************************************************************/
void RCC_Configuration(void); /* 初始化系统时钟 */
void GPIO_Configuration(void); /* IO口的配置*/
void NVIC_Configuration(void); /* 优先级配置 */
void USART1_Configuration(void); /* 串口配置 */
void USART2_Configuration(void); /* 串口配置 */
void EXTI_Configuration(void); /* 外部中断配置 */
//void TIM3_Configuration(void);
//void TIM4_Configuration(void);
//void TIM5_Configuration(void);
//void TIM6_Configuration(void);
//void TIM7_Configuration(void);
/*********************************************************************************************************
* 名 称 :BSP_Init
* 功能描述 : 系统初始化
* 输入参数 : none
* 返回参数 : none.
* 作 者 :
* 修 改 :(日期、修改人名、修改原因)
* 特殊说明 : (特殊功能说明,例如:有参数检查等)
*********************************************************************************************************/
void BSP_Init (void)
{
RCC_Configuration();
EXTI_Configuration();
GPIO_Configuration();
NVIC_Configuration();
USART1_Configuration(); //串口打印
USART2_Configuration(); //串口打印
// TIM1_Configuration();
// TIM4_Configuration(); //pwm
// TIM5_Configuration();
// TIM6_Configuration(); //定时更新姿态
// TIM7_Configuration(); //精确延时
}
/*********************************************************************************************************
* 名 称 :RCC_Configuration
* 功能描述 : 初始化系统时钟
* 输入参数 : none
* 返回参数 : none.
* 作 者 :
* 修 改 :(日期、修改人名、修改原因)
* 特殊说明 : (特殊功能说明,例如:有参数检查等)
*********************************************************************************************************/
void RCC_Configuration(void){
SystemInit();
/*APB1 72MHz,具体有哪些在此时钟上可跳进去查看*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5 | RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM6|RCC_APB1Periph_TIM7
| RCC_APB1Periph_USART2, ENABLE); /*72MHZ*/
/*APB2 36MHz 具体有哪些在此时钟上可跳进去查看*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
| RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE
| RCC_APB2Periph_GPIOE| RCC_APB2Periph_USART1, ENABLE); /* 36MHZ */
}
/*********************************************************************************************************
* 名 称 :GPIO_Configuration
* 功能描述 : 初始化UCOS系统、初始化STM32
* 输入参数 : none
* 返回参数 : none.
* 作 者 :
* 修 改 :(日期、修改人名、修改原因)
* 特殊说明 : (特殊功能说明,例如:有参数检查等)
*********************************************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* LED灯的配置 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出模式最大速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* 按键的配置 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_4| GPIO_Pin_5;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //通用推挽输出模式
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出模式最大速度50MHz
// GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//GPIOC.5 中断线以及中断初始化配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //以上是对于需要用到的I/O口的配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11); //选择gpioB11口作为外部中断使用
EXTI_InitStructure.EXTI_Line=EXTI_Line11; //使能外部中断线5
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //外部中断
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //中断线使能
EXTI_Init(&EXTI_InitStructure);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 2);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //USB_LP_CAN1_RX0_IRQn; //CAN1 RX0中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //USB_LP_CAN1_RX0_IRQn; //CAN1 RX0中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_Init(&NVIC_InitStructure);
//
// NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //外部中断 中断线2的中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //主优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
NVIC_Init(&NVIC_InitStructure);
// NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //外部中断 中断线2的中断
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //主优先级
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
// NVIC_Init(&NVIC_InitStructure);
}