好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

stm32-串口中断总结.doc

16页
  • 卖家[上传人]:cn****1
  • 文档编号:468202353
  • 上传时间:2023-05-25
  • 文档格式:DOC
  • 文档大小:108.50KB
  • / 16 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 本文以USART1为例,叙述串口中断的编程过程1、 先来讲述一下在应用串口中断时涉及到的一些库文件首先对于STM32外设库文件的应用编程, misc.c和stm32f10x_rcc.c是肯定要添加到接下来就是我们要用到的相关外设了 毫无疑问,串口文件stm32f10x_usart.c是必须的串口通信是对通用 GPIO端口引脚的功能复用,所以还需要 stm32f10x_gpio.c文件另外,因为有中断的产生,所以中断文件 stm32f10x_it.c也是必要的,当然这个文件一般和 ma in .c放在一个文件夹下(一般习惯为User文件夹),因为我们的中断响应函数是要在里面自己编写 的当然还有其他的基本必须文件如系统配置文件等在这地方就不说了, 这个是创建一个工程应该知道的2、 初始化对于串口通信的初始化,不仅仅只是对串口的初始化 (这个地方是比较烦人的,不像别的芯片那样简洁明了)首先时钟使能配置 STM32内部的时钟有很多,感兴趣的自己看看参考手册此处以USART1为例说明有 USART1时钟、GPIOA时钟、GPIO复用(AFIO)时钟由于 此处USART1和 GPIOA、AFIO均在APB2上,所以可以一次配置完成。

      如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB 2Periph_USART1 ’ENABLE);其次中断配置主要有优先级组设定、 USART1中断使能、该中断的优先级,中断初始化程序如下:void NVIC_Co nfiguratio n( void){NVIC_I ni tTypeDef NVIC_I ni tStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 选择分组方式 0/*使能USART中断*/NVIC_I ni tStructure.NVIC_IRQCha nnel = USART_IRQ n;NVIC_I ni tStructure.NVIC_IRQCha nn elSubPriority = 0;NVIC_I ni tStructure.NVIC_IRQCha nn elCmd = ENABLE;NVIC_I nit(&N VIC_I nitStructure);}然后GPIO复用功能配置一般情况下我们使用原始的外设和 GPIO端口引脚的映射关系,如果要改变其映射的话,请另外查看参考手册上关于 GPIO重映射部分。

      对于GPIO的复用,其引脚的输入与输出模式都有要求,在参考手册上有详细说明void GPIO_C on figuratio n( void){GPIO_I ni tTypeDef GPIO_I nitStructure;/*配置USART Rx作为浮空输入*/GPIO_I ni tStructure.GPIO_Pin = GPIO_Pin_10;GPIO_I ni tStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_I nit(USARTy_GPIO, & GPIO_I nitStructure);/*配置USART Tx作为推挽输出*/GPIO_I ni tStructure.GPIO_Pin = GPIO_Pin_9;GPIO_I nitStructure.GPIO_Speed = GPIO_Speed_50MH z;GPIO_I ni tStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_I nit(USARTy_GPIO, & GPIO_I nitStructure);}串口初始化配置主要有串口基本参数配置 (如波特率、数据位、工作方式等 ),串口中断使能,串口使能。

      1) 基本参数配置USART_I ni tTypeDef USART_I ni tStructure;USART_InitStructure.USART_BaudRate = 9600// 波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b// 数据长度USART_InitStructure.USART_StopBits = USART_StopBits_1/ 停止位USART_InitStructure.USART_Parity = USART_Parity_Nd/ 校验USART_I ni tStructure.USART_HardwareFlowCo ntrol=USART_HardwareFlowControl_None; // 硬件流控制无USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 发 送与接受两种方式USART_Init(USART, &USART_InitStructure);// 用配置的参数惊喜串口初始化(2) 串口中断使能USART_ITCo nfig(USARTy, USART_IT_RXNE, ENABLE使 能接受中断,在接受移位寄存器中有数据是产生USART_ITCo nfig(USARTy, USART_IT_TXE, ENABLE使能发送中断,在发送完数据后产生。

      一般情况下,如果与 PC通信的话,我们只用接受中断即可3) 串口使能USART_Cmd(USART, ENABLE); //USART1 使能好了,经过以上不走之后呢,我们就可以进行数据的收发了3、 发送数据使用函数USART_SendData(USART1char data),一次只能发送一个字符当然我们可 以用如下函数发送字符串void USART1_Puts(char * str){while(*str){USART_SendData(USART1, *str++); // 发送一个字符while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发 送完毕}}当然我们也可以循环发送字符串数组for(i = 0; TxBufl != '\0'; i++) // TxBufl 为定义好的字符串数组USART_Se ndData(USART2 , TxBufl);while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);}4、 接收数据由于我们使用的是接受中断,所以当有数据需要接收时,会执相应的中断函数。

      此处我 们 USART1 的中断函数在 stm32f10x_it.c 文件中找到函数 void USART_IRQHandler(void),如 果没有的话就自己加上吧,别忘了头文件中需要声明一下当然你也可以在其他文件中写下 该中断函数当产生中断进入该函数之后,我们就可以进行自己的操作了void USARTy_IRQHa ndler(void){if(USART_GetlTStatus(USARTy, USART_IT_RXNE) != RES/E如 果寄存器中有数据{/* Read one byte from the receive data register */RxBuffer1[RxCou nter1++] = USART_ReceiveData(USART;}/*************************************************************if(USART_GetlTStatus(USARTy, USART_IT_TXE) != RESET){USART_Se ndData(USARTy, TxBuffer1[TxCou nter1++]);}//这个地方那个之所以把这个写出来主要是想说发送中断和接受中断其实是共用一个//中断函数的,到底是那个中断发生了呢,这就需要我们读取中断状态标志来识别了。

      /}别忘了在接受完数据进行别的操作之前为了防止数据被覆盖最好先禁止一下接受中断/*禁止USARTI接收中断*/USART_ITCo nfig(USART USART_IT_RXNE, DISABLE);/*禁止USARTI发送中断*/USART_ITCo nfig(USART USART_IT_TXE, DISABLE);5、main函数int main(void) //这个地方和特别,我们知道一般 main函数是没有返回值的,但在STM32 //的编程中其返回类型为int{RCC_Co nfiguratio n();NVIC_C on figuratio n();GPIO_Co nfiguratio n();USART_I ni tStructure.USART_BaudRate = 9600;USART_I ni tStructure.USART_WordLe ngth = USART_WordLe ngth_8b;USART_I nitStructure.USART_StopBits = USART_StopBits_1;USART_I ni tStructure.USART_Parity = USART_Parity_No;USART_I ni tStructure.USART_HardwareFlowC on trol= USART_HardwareFlowC on trol_No ne;USART_I ni tStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_I nit(USART, & USART」nitStructure);USART_ITC on fig(USART USART_IT_RXNE, ENABLE);// USART_ITConfig(USART, USART_IT_TXE, ENABLE);USART_Cmd(USART ENABLE);while⑴〃等待中断{}}当然你也可以在main()中添加一些发送指令之类的东西。

      以上内容为个人总结,转载请注明出处若有错误,本人概不负任何责任STM32 外部中断配NVIC_C on figuratio n 函数实现配置嵌套向量中断中断优先级并使能中断其中的NVIC_PriorityGroupCo nfig 函数配置中断优先级的组织方式, STM32 的嵌套向量中断控制器可以配置 16个可编程的优先等级,使用了 4位表示中断优先级 (2的4此方就是16),16个可编程的优先等级又可以分为主优先级和次优先级,例如参数NVIC_PriorityGroup_1 表示 1bit 主优先级(pre-emption priority ) 3 bits 次优先 级(subpriority )一、配置中断1、分配中断向量表: /* Set the Vector Table base location at 0x20000000 */NVIC_SetVectorTable(NVIC_VectTab_RAM,。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.