苏嵌学习日志13

学习日志

姓名:唐小玲 日期:2018.7.26

 

 

 

今日学习任务

 

  1. NVIC中断
  2. GPIO串口
  3. 中断与串口的相关程序编写

 

日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

均已完成。

 

日开发中出现的问题汇总

 

初次接触STM32系列的单片机,有点懵,此单片机管脚过多,功能复杂,编程有点困难,有点复杂。

 

日未解决问题

 

 

 

日开发收获

 

1.NVIC中断基础

       STM32F4系列包含91个可屏蔽中断(407系列是86个),STM32中有两个优先级的概念—抢占式优先级和响应 优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。  

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。

       当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高 低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

 

3.串口初始化     

GPIO_InitTypeDef GPIO_InitStructure;     

USART_InitTypeDef USART_InitStructure; 

/* 打开 GPIO 时钟 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE)  

/* 打开UART 时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);  /* 将 PA9 映射为 USART1_TX */ GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);  /* 将 PA10 映射为 USART1_RX */     

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); /* 配置 USART Tx 为复用功能 */

GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType =  GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  GPIO_Init(GPIOA,&GPIO_InitStructure);     

/* 配置 USART Rx 为复用功能 */    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

4.配置串口硬件参数

USART_InitStructure.USART_BaudRate = 115200;  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  USART_InitStructure.USART_Mode = USART_Mode_Rx|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);          

/*清楚标志,防止出现bug*/ USART_ClearFlag(USART1,USART_FLAG_TC);

 

5.fput重定义

int fputc(int ch, FILE *f)

 {    

USART_SendData(USART1, (uint8_t) ch);     

 /* Loop until the end of transmission */    

while (USART_GetFlagStatus(USART1,  USART_FLAG_TC) == RESET) {}      

return ch;

}

 

6.GPIO的输出控制

 库函数:

• GPIO_SetBits     (GPIOx, GPIO_Pin)

• GPIO_ResetBits (GPIOx, GPIO_Pin)

• GPIO_ToggleBits(GPIOx, GPIO_Pin)

• 寄存器模式:

• GPIOx->BSRRL  = GPIO_Pin;   //置高

• GPIOx->BSRRH = GPIO_Pin;   //置低

• GPIOx->ODR   ^= GPIO_Pin;   //取反

 

自我评价

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习!

 

 

作业

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_36974603/article/details/81226728