完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.串口配置的一般步骤
(1)串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd(); (2)串口复位:USART_DeInit();这一步不是必须的 (3)GPIO端口模式设置:GPIO_Init();模式设置GPIO_Mode_AF_PP (4)串口参数初始化:USART_Init(); (5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤) NVIC_Init(); USART_ITCon; (6) 使能串口:USART_Cmd(); (7) 编写中断处理函数:USAETx_IRQHandler(); (8) 串口数据收发: void USART_SendData();发送数据到串口,DR uint16_t USART_ReceiveData();从DR读取接收到的数据 (9) 串口传输状态获取: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx,uint16_t USART_FLAG); void USART_ClearlTPendingBit(USART_TypeDef* USARTx,uint16_t USART_IT); 代码: usart1.h #ifndef __USART1_H #define __USART1_H #include "sys.h" void My_USART1_Init(void); #endif usart1.c #include "usart1.h" void My_USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStrue; NVIC_InitTypeDef NVIC_InitStrue; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//USART1使能 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); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); USART_InitStrue.USART_BaudRate=115200;//设置波特率,通信双方波特率应约定好 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;//子长为8位 USART_Init(USART1,&USART_InitStrue);//初始化串口 USART_Cmd(USART1,ENABLE);//使能USART1 NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;//设置与USART1相关的中断 NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=3 ; NVIC_InitStrue.NVIC_IRQChannelSubPriority = 3; NVIC_Init(&NVIC_InitStrue);//中断优先级初始化 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启中断 } main.c #include "stm32f10x.h" #include "usart1.h" int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); My_USART1_Init(); while(1); } void USART1_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART1,USART_IT_RXNE)) { res=USART_ReceiveData(USART1); USART_SendData(USART1,res); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1537 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1490 浏览 1 评论
909 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
653 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1537 浏览 2 评论
1843浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
593浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
496浏览 3评论
494浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
475浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 02:05 , Processed in 0.637383 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号