新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2021-5-1
- 在线时间
- 4 小时
|
2金钱
stm32f407zg
我仿照a盘的串口输入实验样例做了一个程序,发现主函数的循环体内无法进入条件。
尝试调试,调试之后程序能够进入中断,但是就是进入不了if里面
主函数
- int main(void)
- {
- int recive;
-
- //初始化延时
- delay_init(168);
-
- //初始化系统
- GPIO_mode();
- USART_mode();
- USART1_interrupt_mode();
-
- while(1)
- {
- printf("please input some words\r\n");
-
- //接收数据结束后进入分支
- if((USART_RX_STA&0x8000)!=0)
- {
- int i;
-
- //获取接受字长
- recive=(USART_RX_STA&0x3FFF);
- //
- printf("\r\n");
- printf("you've input:");
-
- for(i=0; i<recive; i++)
- {
- USART_SendData(USART1, USART_RX_BUF[i]);
- }
- printf("\r\n");
-
- //复位
- USART_RX_STA=0;
- }
- delay_ms(1000);
- }
- }
复制代码
以下是初始化外设和中断的函数,但我觉得问题可能不会在这里面
- void GPIO_mode(void)
- {
- //定义GPIO初始化结构体
- GPIO_InitTypeDef PA9;
- GPIO_InitTypeDef PA10;
-
- //打开GPIO时钟
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
-
- //初始化PA9
- PA9.GPIO_Mode=GPIO_Mode_AF;
- PA9.GPIO_OType=GPIO_OType_PP;
- PA9.GPIO_Pin=GPIO_Pin_9;
- PA9.GPIO_PuPd=GPIO_PuPd_UP;
- PA9.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&PA9);
-
- //初始化PA10
- PA10.GPIO_Mode=GPIO_Mode_AF;
- PA10.GPIO_OType=GPIO_OType_PP;
- PA10.GPIO_Pin=GPIO_Pin_9;
- PA10.GPIO_PuPd=GPIO_PuPd_UP;
- PA10.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&PA10);
-
- //将引脚复用
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
- }
- void USART_mode(void)
- {
- //定义USART1初始化结构体
- USART_InitTypeDef Usart1_content1;
-
- //打开USART1时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
-
- //初始化USART1
- Usart1_content1.USART_BaudRate=115200;
- Usart1_content1.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
- Usart1_content1.USART_Mode=USART_Mode_RTx;
- Usart1_content1.USART_Parity=USART_Parity_No;
- Usart1_content1.USART_StopBits=USART_StopBits_1;
- Usart1_content1.USART_WordLength=USART_WordLength_8b;
- USART_Init(USART1,&Usart1_content1);
-
- //打开USART1
- USART_Cmd(USART1,ENABLE);
-
- //接驳中断
- USART_ITConfig(USART1,USART_IT_PE,ENABLE);
- }
- void USART1_interrupt_mode(void)
- {
- //定义中断初始化结构体
- NVIC_InitTypeDef USART1_Interrupt_content;
-
- //中断分组
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- //初始化USART1中断
- USART1_Interrupt_content.NVIC_IRQChannel=USART1_IRQn;
- USART1_Interrupt_content.NVIC_IRQChannelCmd=ENABLE;
- USART1_Interrupt_content.NVIC_IRQChannelPreemptionPriority=0;
- USART1_Interrupt_content.NVIC_IRQChannelSubPriority=0;
- NVIC_Init(&USART1_Interrupt_content);
- }
复制代码
|
|