- int main(void)
- {
-
- //配置systick时钟的时钟源
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
-
- if(SysTick_Config(SystemCoreClock/1000)!=0)
- {
-
- }
-
- //配置中断优先分组
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- //声明一个GPIO结构体变量
- GPIO_InitTypeDef GPIO_InitStructure;
- //声明一个USART结构体变量
- USART_InitTypeDef USART_InitStructure;
- //使能USART1外设时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
- //使能GPIO外设时钟
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
- //定义GPIO结构体变量,复用该IO口作为串口
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9 |GPIO_Pin_10;//两个IO口
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF; //复用模式
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //50MHz
- GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //推挽输出
- GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP; //上拉
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- //定义USART结构体变量
- USART_InitStructure.USART_BaudRate=115200;
- USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制
- USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //收发模式
- USART_InitStructure.USART_Parity=USART_Parity_No; //无校准
- USART_InitStructure.USART_StopBits=USART_StopBits_1; //1位停止位
- USART_InitStructure.USART_WordLength=USART_WordLength_8b; //字长为8
- //明确IO为何功能进行配置
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
-
- //串口进行初始化
- USART_Init(USART1,&USART_InitStructure);
- //串口中断优先组结构体变量声明
- NVIC_InitTypeDef NVIC_InitStructure_usart;
- //定义该串口中断优先组分组
- NVIC_InitStructure_usart.NVIC_IRQChannel=USART1_IRQn;
- NVIC_InitStructure_usart.NVIC_IRQChannelCmd=ENABLE;
- NVIC_InitStructure_usart.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级设置
- NVIC_InitStructure_usart.NVIC_IRQChannelSubPriority=0x02; //响应优先级设置
- //初始化该优先级分组
- NVIC_Init(&NVIC_InitStructure_usart);
-
- //配置串口接收中断
- USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
- //使能串口1
- USART_Cmd(USART1,ENABLE);
-
- while(1)
- {
- //定时发送数据的功能
- USART_SendData(USART1,9);
- delay_sys(1000);
-
- }
-
- }
- //进行数据的回传
- void USART1_IRQHandler(void)
- {
- u8 res;
- if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否有接收中断
- {
- res=USART_ReceiveData(USART1);
- USART_SendData(USART1,res);
- }
-
- }
- //延时功能
- int delaytime;
- void delay_sys(unsigned int time)
- {
- delaytime=time;
- while(delaytime!=0);//延时
- }
- //systick中的中断函数,对其进行编写
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] This function handles SysTick Handler.
- * @param None
- * @retval None
- */
- void SysTick_Handler(void)
- {
-
- if(delaytime!=0)
- {
- delaytime--;
- }
- }
|