电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

串口编程知识点梳理汇总VIP免费

串口编程知识点梳理汇总_第1页
1/6
串口编程知识点梳理汇总_第2页
2/6
串口编程知识点梳理汇总_第3页
3/6
四、串口编程对于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的寄存器地址是:0x40013800-3BFF,USART2的寄存器地址是:0x40004400-47FF,USART3的寄存器地址是:0x40004800-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时(发送完成),说明数据发送完成。编写串口中断函数voidUSART1_IRQHandler(void)在startup_stm32f10x_md.s有定义中断入口函数定义:USART1_IRQHandlerUSART2_IRQHandlerUSART3_IRQHandlerRXNE:读数据寄存器非空(Readdataregisternotempty)TC:发送完成(Transmissioncomplete)TXE:发送数据寄存器空(Transmitdataregisterempty)RXNE(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时需要尽快去读取USART_DR,通过读USART_DR可以将该位清零,也可以向该位写0,直接清除。TC(发送完成),当该位被置位的时候,表示USART_DR内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读USART_SR,写USART_DR。2)直接向该位写0。串口库函数编程voidUSART1_Config(void){GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructure;/*configUSART1clock,串口时钟使能*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);USART_DeInit(USART1);//复位串口1/*USART1GPIOconfig串口IO配置*//*ConfigureUSART1Tx(PA.09)asalternatefunctionpush-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);/*ConfigureUSART1Rx(PA.10)asinputfloating*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);/*USART1modeconfig串口模式配置*/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);//开启读数据寄存器非空中断voidUSART_SendData(USART_TypeDef*USARTx,uint16_tData);//发送数据到串口。uint16_tUSART_ReceiveData(USART_TypeDef*USARTx);//接收串口数据4个状态标志函数FlagStatusUSART_GetFlagStatus(USART_TypeDef*USARTx,uint16_tUSART_FLAG);voidUSART_ClearFlag(USART_TypeDef*USARTx,uint16_tUSART_FLAG);ITStatusUSART_GetITStatus(USART_TypeDef*USARTx,uint16_tUSART_IT);voidUSART_ClearITPendingBit(USART_TypeDef*USARTx,uint16_tUSART_IT);USART_FLAG_TXE发送数据寄存器空标志位USART_FLAG_TC发送完成标志位USART_FLAG_RXNE接收数据寄存器非空标志位typedefstruct{u32USART_BaudRate;u16USART_WordLength;u16USART_StopBits;u16USART_Parity;u16USART_HardwareFlowControl;u16USART_Mode;u16USART_Clock;u16USART_CPOL;u16USART_CPHA;u16USART_LastBit;}USART_InitTypeDef;异步模式相关参数设置如下:

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

串口编程知识点梳理汇总

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部