完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32串口编程
参考官方文档 串口常用的相关寄存器 USART_SR 状态寄存器 USART_DR数据寄存器 USART_BRR波特率寄存器 串口波特率配置 波特率计算公式 fPCLKx:串口的时钟,从手册中Memory map和Clock tree可得知, fpclkx分为:fpclk1用于AHB1中USART2、USART3、USART4、USART5 ,fpclk2 用于AHB2中USART1 Baud Rate:需要设定的波特率 USARTDIV:一个无符号浮点数值 举例: 最大fPCLK2 = 72M Baud Rate = 115200 USARTDIV = 72000000/(16*115200)=39.0625 查看手册 DIV_Mantissa=16*0.0625≈1=0x01 DIV_Fraction=39=0x27 因此我们就可以设置USART1->BRR = 0x0271,也就是我们配置了此时的串口波特率为115200 串口编程常用库函数 详细信息查看官方库函数stm32f10x_usart.h 和 stm32f10x_usart.c文件 /*串口初始化:波特率,数据字长,奇偶校验等等*/ void USART_Init(); /*使能串口 */ void USART_Cmd(); /*使能相关中断 */ void USART_ITConfig(); /*发送数据到串口,DR寄存器*/ void USART_SendData(); /*接受数据,从DR读取接受到的数据 */ uint16_t USART_ReceiveData(); /*获取状态标志位 */ FlagStatus USART_GetFlagStatus(); /*清除状态标志位*/ void USART_ClearFlag(); /*获取中断状态标志位*/ ITStatus USART_GetITStatus(); /*清除中断状态标志位*/ void USART_ClearITPendingBit(); 实例编程 void Demo_USART1_Init(void) { /*GPIO_InitStrue通用IO口相关参数配置*/ GPIO_InitTypeDef GPIO_InitStrue; /*USART_InitStrue串口参数相关配置*/ USART_InitTypeDef USART_InitStrue; /*NVIC_InitStrue中断优先级相关参数配置*/ NVIC_InitTypeDef NVIC_InitStrue; /*使能RCC_APB2Periph_GPIOA时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /*使能RCC_APB2Periph_USART1时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); /*配置GPIO_Pin_9参数*/ GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9; GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz; /*初始化GPIO_Pin_9*/ GPIO_Init(GPIOA,&GPIO_InitStrue); /*配置GPIO_Pin_10参数*/ GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10; GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz; /*初始化GPIO_Pin_10*/ GPIO_Init(GPIOA,&GPIO_InitStrue); /*配置串口参数:波特率,数据字长,奇偶校验*/ USART_InitStrue.USART_BaudRate=115200;/*使用库函数的好处就是不用程序员亲自计算BRR寄存器设置*/ USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None; USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; USART_InitStrue.USART_Parity=USART_Parity_No; USART_InitStrue.USART_StopBits=USART_StopBits_1; USART_InitStrue.USART_WordLength=USART_WordLength_8b; /*初始化串口*/ USART_Init(USART1,&USART_InitStrue); /*使能串口1USART1中断*/ USART_Cmd(USART1,ENABLE); /*如果想要开启中断,则开启接收接收中断*/ USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); /*配置中断优先级参数*/ NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn; NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStrue.NVIC_IRQChannelSubPriority=1; /*初始化中断响应优先级*/ NVIC_Init(&NVIC_InitStrue); } /*实现中断函数*/ void USART1_IRQHandler(void) { u8 rec_data; if(USART_GetITStatus(USART1,USART_IT_RXNE)) { rec_data= USART_ReceiveData(USART1); USART_SendData(USART1,rec_data); } } int main(void) { /*必须在配置中断之前初始化中断优先级分组*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Demo_USART1_Init(); while(1); } |
|
|
|
只有小组成员才能发言,加入小组>>
2489 浏览 0 评论
1057浏览 2评论
673浏览 1评论
439浏览 0评论
175浏览 0评论
284浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 03:22 , Processed in 1.114612 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号