04-串口编程-yy.doc_第1页
04-串口编程-yy.doc_第2页
04-串口编程-yy.doc_第3页
04-串口编程-yy.doc_第4页
04-串口编程-yy.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四、串口编程对于stm32F103,USART1的TX和RX分别是PA9和PA10,若开启了REMAP,则可以映射到PB6和PB7。USART1映射关系如下表USART2和USART3映射关系如下1重映像只适用于100和144脚的封装USART的GPIO设置如下表最基本的串口编程过程:开启串口时钟,设置IO口模式,串口复位,配置波特率、数据位长度、奇偶校验位,开启发送、接收使能,开启接收中断使能,设置接收中断分组和优先级,编写接收中断函数。STM32F103Rx共有3个串口,其中USART1接APB2,其它2个接APB1。USART1的寄存器地址是:0x4001 3800-3BFF,USART2的寄存器地址是:0x4000 4400-47FF,USART3的寄存器地址是:0x4000 4800-4BFF.每个串口都有自己独立的配置寄存器(SR, DR, BRR, CR1, CR2, CR3, GTPR)配置过程如下:APR2ENR使能寄存器APB2RSTR复位寄存器串口寄存器编程串口时钟使能串口1是在RCC-APB2ENR的第14位,其它串口在APB1ENR串口复位串口1是在RCC-APB2RSTR的第14位,写1复位,写0结束复位串口波特率设置 Fck是外设时钟,对于USART1是PCLK2,即APB2上的时钟通过fck和波特率,计算得到USARTDIV并设置到USART_BRR中,BRR中低4为是小数部分,高12位是整数部分。定义字长USART_CR1的第12位,0:8个数据,1:9个数据定义停止位USART_CR2的第12、13位,00:1个停止位,10:2个停止位接收和发送使能USART_CR1的第2、3位(RE、TE)串口中断使能USART_CR1的第5位:RXNEIE接收缓冲区非空使能,即USART_SR中ORE或RXNE为1时USART-CR1的第8位:PE中断使能,即USART-SR中PE为1时(为什么要设置校验错误使能中断)串口使能USART_CR1的第13位UE,置1,串口模块使能设置串口中断,组,优先级MY_NVIC_Init(3,3,USART1_IRQChannel,2) 组2,抢占式优先级3,从优先级3(最低)在stm32f10x_nvic.h文件中定义了中断通道名称。接收和发送的数据USART1-DR中是接收的数据和发送的数据。当USART-SR的第8位TC为1时(发送完成),说明数据发送完成。编写串口中断函数void USART1_IRQHandler(void)在startup_stm32f10x_md.s有定义中断入口函数定义:USART1_IRQHandlerUSART2_IRQHandlerUSART3_IRQHandlerRXNE:读数据寄存器非空 (Read data register not empty)TC:发送完成 (Transmission complete)TXE:发送数据寄存器空 (Transmit data register empty)RXNE(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时需要尽快去读取USART_DR,通过读USART_DR可以将该位清零,也可以向该位写0,直接清除。 TC(发送完成),当该位被置位的时候,表示USART_DR内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读USART_SR,写USART_DR。2)直接向该位写0。串口库函数编程void USART1_Config(void)GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART1 clock, 串口时钟使能 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);USART_DeInit(USART1); /复位串口1/* USART1 GPIO config 串口IO配置 */* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure); /* USART1 mode config 串口模式配置 */USART_InitStructure.USART_BaudRate = 115200;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_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); /开启读数据寄存器非空中断void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); /发送数据到串口。uint16_t USART_ReceiveData(USART_TypeDef* USARTx); /接收串口数据4个状态标志函数 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);USART_FLAG_TXE 发送数据寄存器空标志位 USART_FLAG_TC 发送完成标志位 USART_FLAG_RXNE 接收数据寄存器非空标志位typedef struct u32 USART_BaudRate; u16 USART_WordLength; u16 USART_Sto

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论