完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
UART1的初始化设置
void UART_Init() { /* GPIO初始化参数*/ GPIO_InitTypeDef GPIO_InitStruct; /* UART初始化参数*/ USART_InitTypeDef USART_InitStruct; /* 复位UART1*/ USART_DeInit(USART1); /* 开启USART1时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* 开启GPIOA时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; USART_InitStruct.USART_BaudRate = 128000; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /* 初始化GPIO*/ GPIO_Init(GPIOA, &GPIO_InitStruct); /* 初始化UART1*/ USART_Init(USART1, &USART_InitStruct); /* 使能UART1*/ USART_Cmd(USART1, ENABLE); } 解析: 1、UART1和复用的IO都在时钟APB2上,所以先开启UART1和GPIOA时钟 2、对GPIO参数进行设置,注意发送和接收IO对应的工作模式 3、初始化UART参数,依次为波特率、数据长度、停止位、校验位、模式设置(全双工)、硬件数据流控制开关。 4、初始化GPIO与UART1 5、使能UART1 发送数据可使用USART_SendData(USART1,DATA); 使用while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);查询数据是否发送完成。 寄存器初始化: void USART1_Init(u32 pclk2,u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB2ENR|=1<<14; //使能串口时钟 GPIOA->CRH&=0XFFFFF00F;//IO状态设置 GPIOA->CRH|=0X000004B0;//IO状态设置 RCC->APB2RSTR|=1<<14; //复位串口1 RCC->APB2RSTR&=~(1<<14);//停止复位 //波特率设置 USART1->BRR=mantissa; // 波特率设置 USART1->CR1|=0X200C; //1位停止,无校验位. USART1->SR; //防首字符丢失 } //串口2初始化 void USART2_Init(u32 pclk1,u32 bound) { float temp; u16 mantissa; u16 fraction; NVIC_InitTypeDef NVIC_InitStructure; temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB1ENR|=1<<17; //使能串口2时钟 GPIOA->CRL&=0XFFFF00FF;//IO状态设置 GPIOA->CRL|=0X00004B00;//IO状态设置 RCC->APB1RSTR|=1<<17; //复位串口2 RCC->APB1RSTR&=~(1<<17);//停止复位 //波特率设置 USART2->BRR=mantissa; // 波特率设置 USART2->CR1|=0X200C; //收发使能 USART2->SR; //防首字符丢失 //Usart2 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断 } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
642浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
514浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
501浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 19:35 , Processed in 0.676548 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号