- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本文以USART1为例,叙述串口中断的编程过程。
1、先来讲述一下在应用串口中断时涉及到的一些库文件。
首先对于STM32外设库文件的应用编程,misc.c和stm32f10x_rcc.c是肯定要添加到。
接下来就是我们要用到的相关外设了。毫无疑问,串口文件stm32f10x_usart.c是必须的。串口通信是对通用GPIO端口引脚的功能复用,所以还需要stm32f10x_gpio.c文件。另外,因为有中断的产生,所以中断文件stm32f10x_it.c也是必要的,当然这个文件一般和main.c放在一个文件夹下(一般习惯为User文件夹),因为我们的中断响应函数是要在里面自己编写的。
当然还有其他的基本必须文件如系统配置文件等在这地方就不说了,这个是创建一个工程应该知道的。
2、初始化
对于串口通信的初始化,不仅仅只是对串口的初始化(这个地方是比较烦人的,不像别的芯片那样简洁明了)。
l?首先时钟使能配置。STM32内部的时钟有很多,感兴趣的自己看看参考手册。此处以USART1为例说明。有USART1时钟、GPIOA时钟、GPIO复用(AFIO)时钟。由于此处USART1和GPIOA、AFIO均在APB2上,所以可以一次配置完成。如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1?,ENABLE);
l?其次中断配置。主要有优先级组设定、USART1中断使能、该中断的优先级,中断初始化。程序如下:
void?NVIC_Configuration(void)
{
??NVIC_InitTypeDef?NVIC_InitStructure;
??NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//选择分组方式0
??
??/*?使能?USART1?中断?*/
??NVIC_InitStructure.NVIC_IRQChannel?=?USART1_IRQn;
??NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?0;
??NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;
??NVIC_Init(NVIC_InitStructure);
}
l?然后GPIO复用功能配置。一般情况下我们使用原始的外设和GPIO端口引脚的映射关系,如果要改变其映射的话,请另外查看参考手册上关于GPIO重映射部分。对于GPIO的复用,其引脚的输入与输出模式都有要求,在参考手册上有详细说明。
void?GPIO_Configuration(void)
{
??GPIO_InitTypeDef?GPIO_InitStructure;
??/*?配置?USART1?Rx?作为浮空输入?*/
??GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_10;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_IN_FLOATING;
??GPIO_Init(USARTy_GPIO,?GPIO_InitStructure);
??/*?配置?USART1?Tx?作为推挽输出?*/
??GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_9;
??GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;
??GPIO_Init(USARTy_GPIO,?GPIO_InitStructure);
}
l?串口初始化配置。主要有串口基本参数配置(如波特率、数据位、工作方式等),串口中断使能,串口使能。
(1)?基本参数配置
USART_InitTypeDef?USART_InitStructure;
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_No;//校验
USART_InitStructure.USART_HardwareFlowControl
=USART_HardwareFlowCon
文档评论(0)