完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
/*****************************************************************************
//函数名:void USART1_Configuration(void) //功能:串口(USART1)重映射初始化配置函数,由TX PA9~PB6 RX PA10~~PB7 *****************************************************************************/ void USART1_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_DeInit(USART1); //复位串口1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOB以及复用功能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//开启串口1时钟 GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射 //USART1_TX发射引脚 PB.6 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PB.6 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PB6 //USART1_RX接受引脚 B.7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PB7 //USART1串口初始化设置 USART_InitStructure.USART_BaudRate = 9600;//一般设置为9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位数据格式 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); //初始化串口 //USART1 NVIC 配置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //分组 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能 NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断 USART_Cmd(USART1, ENABLE); //使能串口 USART_ClearFlag(USART1,USART_FLAG_TC);//解决第一个字节无法发送的问题 } 以上是配置的代码,应该是配置好了的,下面的中断函数是能进入的,我用led是否点亮来测试的,已发送led就有反应,但手机就是收不到 void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) { if(USART_ReceiveData(USART1)=='a') GPIO_SetBits(GPIOB,GPIO_Pin_5);//发送‘a’led点亮 delay(1000); USART_SendData(USART1,USART_ReceiveData(USART1));//发回数据,但没能实现!!! delay(1000); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); } } 希望大家帮忙看一下 |
|
相关推荐
9个回答
|
|
|
嗯 后来解决了
|
|
|
|
|
|
帮顶....
|
|
|
|
|
|
谢原子哥!
|
|
|
|
|
|
注定要沉嘛,大家都木有遇到过这样的情况么...
|
|
|
|
|
|
开启发送中断
|
|
|
|
|
|
刚刚解决,你看看前后有什么不同,我感觉都一样啊,就是把代码稍微整理了一下。(发送中断是屏蔽掉的,可以收到)
#include"stm32f10x.h" #include "usart.h" /**************************************************************************** * 名 称:void RCC_Configuration(void) * 功 能:系统时钟配置为72MHZ, 外设时钟配置 * 入口参数:无 * 出口参数:无 * 说 明: * 调用方法:无 ****************************************************************************/ void RCC_Configuration(void) { //SystemInit(); RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射 } /**************************************************************************** * 名 称:void GPIO_Configuration(void) * 功 能:通用IO口配置 * 入口参数:无 * 出口参数:无 * 说 明: * 调用方法: ****************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1控制--PB5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* 默认复用功能 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //USART1 TX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOB, &GPIO_InitStructure); //B端口 /* 复用功能的输入引脚必须配置为输入模式(浮空/上拉/下拉的一种)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //USART1 RX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //复用浮空输入 GPIO_Init(GPIOB, &GPIO_InitStructure); //B端口 } /**************************************************************************** * 名 称:void NVIC_Configuration(void) * 功 能:中断源配置 * 入口参数:无 * 出口参数:无 * 说 明: * 调用方法:无 ****************************************************************************/ void NVIC_Configuration(void) { /* 结构声明*/ NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //设置串口1中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能 NVIC_Init(&NVIC_InitStructure); } /**************************************************************************** * 名 称:USART_Config(USART_TypeDef* USARTx) * 功 能:配置串口 * 入口参数: * 出口参数:无 * 说 明: * 调用方法:例如: USART_Config(USART1) ****************************************************************************/ void USART_Config(USART_TypeDef* USARTx) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600;//速率9600bps USART_InitStructure.USART_WordLength = USART_WordLength_8b;//数据位8位 USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位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;//收发模式 /* Configure USART1 */ USART_Init(USARTx,&USART_InitStructure);//配置串口参数函数 /* Enable USART1 Receive and Transmit interrupts */ USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收中断 //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//使能发送缓冲空中断 /* Enable the USART1 */ USART_Cmd(USART1, ENABLE); } /***************************************************************************** //函数名:void USART1_Configuration(void) //功能:串口(USART1)重映射初始化配置函数,由TX A9~PB6 RX A10~~PB7 ******************************************************************************/ void USART1_Configuration(void) { RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); USART_Config(USART1); } 以上代码就可以收到了,求指出前后有什么区别啊,哪里没注意到,好像真的都一样,后面更有条理而已。 |
|
|
|
|
|
上下两个设置我真没看出来有什么不同,只是顺序的话 ,上面那种中断,串口的配置代码顺序我也更换过,但还是不行,大家有发现有问题的那段USART1_Configuration(void)和下面可以接收的配置代码有什么区别的,还望指出来一起学习,或者说在串口配置中要注意哪些细节问题,希望大家多交流。
|
|
|
|
|
|
你这个是什么情况?灯亮了但是没有数据返回吗?
|
|
|
|
|
|
nvic的问题,移除NVIC就好了,具体的原因还是不清楚
|
|
|
|
|
只有小组成员才能发言,加入小组>>
635 浏览 0 评论
653浏览 1评论
804浏览 1评论
898浏览 1评论
用PSOC6 BLE当外围设备,两者传输数据时,psoc6概率性出现蓝牙挂死的原因?
845浏览 1评论
是否有办法通过CYW20835板的固件发送BLE HCI命令?
792浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 13:20 , Processed in 0.661170 second(s), Total 58, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4992