完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
#include "stm32f10x.h" /************************************************ 该程序讲解串口程序的一般配置方法: 步骤为: 1、先对端口进行复用或者重映射操作(该程序中是对端口进行复用操作) 2、串口复位,函数为USART_DeInit(); 3、串口初始化:USART_Init(); 4、中断初始化: NVIC_Init(); 5、串口使能:USART_Cmd(); 6、开启中断:USART_ITConfig(); 7、编写中断处理函数:void USART1_IRQHandler(void) briangooole@gmail.com 于2017年06月29日 ------------------------- USART_TX | PA9 ------------------------- USART_RX | PA10 ------------------------- ************************************************/ void MY_USART_Init(void) { GPIO_InitTypeDef GPIO_InitStrue; //在GPIO_Init函数调用时需定义一个GPIO_InitTypeDef结构体类型变量 USART_InitTypeDef USART_InitStrue; //USART_Init函数调用时需定义一个USART_InitTypeDef结构体类型变量 NVIC_InitTypeDef NVIC_InitStrue; //USART_Init函数调用时需定义一个NVIC_InitTypeDef结构体类型变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); //RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //由于串口功能是GPIO的第二功能,所以要对端口进行复用操作, //一般步骤为:GPIO时钟使能-》复用的外设时钟使能-》将端口按照复用的功能进行模式配置 USART_DeInit(USART1); //串口复位 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; //复用功能推挽输出模式 GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9; //PA9 GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz; //设置输出速度 GPIO_Init(GPIOA,&GPIO_InitStrue); GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入模式 GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10; //PA10 GPIO_Init(GPIOA,&GPIO_InitStrue); USART_InitStrue.USART_BaudRate=9600;//设置波特率9600 USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制,相关寄存器为CR3 USART_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//模式为接收和发送 USART_InitStrue.USART_Parity=USART_Parity_No;//无奇偶校验位0x0000,相关寄存器为SR1的PS位 USART_InitStrue.USART_StopBits=USART_StopBits_1; //1个停止位 USART_InitStrue.USART_WordLength=USART_WordLength_8b; //数据长度为8位 USART_Init(USART1,&USART_InitStrue); //串口初始化 NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn; //串口1对应的中断名称 NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; //使能该中断通道 NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级为2,因为此程序只有一个中断,故可任意设置 NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;//响应优先级为1,因为此程序只有一个中断,故可任意设置 NVIC_Init(&NVIC_InitStrue); //中断初始化 USART_Cmd(USART1,ENABLE); //串口使能 就是将寄存器CR1中的UE位置1 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能串口中断,也叫开启串口中断,第二个参数是设置具体开启哪种中断,具体为寄存器SR } void USART1_IRQHandler(void) //中断函数 { u16 DATA; if(USART_GetITStatus(USART1,USART_IT_RXNE))//判断如果收到了数据,收到数据CR1中RXNE位为1,该函数的返回值为1,则执行if包含的语句 { DATA=USART_ReceiveData(USART1);//读取数据 USART_SendData(USART1,DATA);//发送读到的数据 } } int main(void) //主函数 { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//进行中断分组,分为2组:2位抢占优先级,2位响应优先级 MY_USART_Init(); //调用串口初始化函数 while(1); //等待中端发生 } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1097 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1111 浏览 1 评论
549 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
415 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
996 浏览 2 评论
1593浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
262浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
275浏览 3评论
245浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
238浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 12:51 , Processed in 1.056263 second(s), Total 75, Slave 60 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号