用stm32实现流水灯启动,暂停,加速和减速,配置加速用的按键中断引脚为PB14,暂停用的按键引脚为PB11,配置如下
void key_init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitTypeDef GPIO_Initstructure;
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_Initstructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11); //PB11 init
EXTI_InitTypeDef EXTI_Initstructure_1;
EXTI_Initstructure_1.EXTI_Line = EXTI_Line11;
EXTI_Initstructure_1.EXTI_LineCmd = ENABLE;
EXTI_Initstructure_1.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_Initstructure_1.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_Initstructure_1);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_Initsturcture1;
NVIC_Initsturcture1.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_Initsturcture1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initsturcture1.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_Initsturcture1.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_Initsturcture1);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11);//PB14 init
EXTI_InitTypeDef EXTI_Initstructure_2;
EXTI_Initstructure_2.EXTI_Line = EXTI_Line14;
EXTI_Initstructure_2.EXTI_LineCmd = ENABLE;
EXTI_Initstructure_2.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_Initstructure_2.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_Initstructure_2);
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_Initsturcture_2;
NVIC_Initsturcture_2.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_Initsturcture_2.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initsturcture_2.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_Initsturcture_2.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_Initsturcture_2);
在PA9和PA10上配置了串口通信USART,只用到了PA9作为发送端,配置函数如下
void serial_init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitTypeDef USART_Initstructure;
USART_Initstructure.USART_BaudRate = 9600;
USART_Initstructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Initstructure.USART_Mode = USART_Mode_Tx;
USART_Initstructure.USART_Parity = USART_Parity_No;
USART_Initstructure.USART_StopBits = USART_StopBits_1;
USART_Initstructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1,&USART_Initstructure);
USART_Cmd(USART1,ENABLE);
}
void serial_sendbyte(uint8_t byte){
USART_SendData(USART1,byte);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
}
结果烧录程序的时候发现串口无法发送数据,是怎么回事,是按键的中断配置有问题吗