野火STM32F103开发板使用串口3接收数据并通过串口2发送

废话不多说先上最终效果图,硬件连接如下所示,野火的开发板在使用串口2和串口3时需要用黄色跳帽如下图连接:

具体代码如下所示:

static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* 嵌套向量中断控制器组选择 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* 配置USART为中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  /* 抢断优先级*/
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  /* 使能中断 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* 初始化配置NVIC */
  NVIC_Init(&NVIC_InitStructure);
}

void USART2_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;


	// 打开串口GPIO的时钟
	DEBUG_USART2_GPIO_APBxClkCmd(DEBUG_USART2_GPIO_CLK, ENABLE);
	
	// 打开串口外设的时钟
	DEBUG_USART2_APBxClkCmd(DEBUG_USART2_CLK, ENABLE);

	// 将USART Tx的GPIO配置为推挽复用模式
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART2_TX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DEBUG_USART2_TX_GPIO_PORT, &GPIO_InitStructure);
  // 将USART Rx的GPIO配置为浮空输入模式
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART2_RX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(DEBUG_USART2_RX_GPIO_PORT, &GPIO_InitStructure);
	// 配置串口的工作参数
	// 配置波特率
	USART_InitStructure.USART_BaudRate = DEBUG_USART2_BAUDRATE;
	// 配置 针数据字长
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	// 配置停止位
	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(DEBUG_USART2, &USART_InitStructure);
  NVIC_Configuration();
  USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
	// 使能串口
	USART_Cmd(DEBUG_USART2, ENABLE);	    
}
static void NVIC2_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* 嵌套向量中断控制器组选择 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* 配置USART为中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  /* 抢断优先级*/
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* 初始化配置NVIC */
  NVIC_Init(&NVIC_InitStructure);
}

void USART3_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	// 打开串口GPIO的时钟
	DEBUG_USART3_GPIO_APBxClkCmd(DEBUG_USART3_GPIO_CLK, ENABLE);
	
	// 打开串口外设的时钟
	DEBUG_USART3_APBxClkCmd(DEBUG_USART3_CLK, ENABLE);
	// 将USART Tx的GPIO配置为推挽复用模式
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART3_TX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DEBUG_USART3_TX_GPIO_PORT, &GPIO_InitStructure);

  // 将USART Rx的GPIO配置为浮空输入模式
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART3_RX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(DEBUG_USART3_RX_GPIO_PORT, &GPIO_InitStructure);
	// 配置串口的工作参数
	// 配置波特率
	USART_InitStructure.USART_BaudRate = DEBUG_USART3_BAUDRATE;
	// 配置 针数据字长
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	// 配置停止位
	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(DEBUG_USART3, &USART_InitStructure);
	
	NVIC2_Configuration();
  USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); 
	// 使能串口
	USART_Cmd(DEBUG_USART3, ENABLE);	    
}
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{
	unsigned int k=0;
  do 
  {
      Usart_SendByte( pUSARTx, *(str + k) );
      k++;
  } while(*(str + k)!='\0');
  
  /* 等待发送完成 */
  while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
  {}
}
void USART3_IRQHandler(void) 
{ 
	
	uint8_t ucTemp;
	uint8_t ucaRxBuf[256];
	uint16_t usRxcount=0;
	
	if (USART_GetITStatus(DEBUG_USART3,USART_IT_RXNE)!=RESET)
		{
				ucTemp = USART_ReceiveData(USART3);
			if(usRxcount < sizeof(ucaRxBuf))
			{
			  ucaRxBuf[usRxcount++]=ucTemp;
			}
					Usart_SendString(USART2,(char *)ucaRxBuf);
			usRxcount=0;
		//	while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); 
		}
}

在main函数中只需要调用USART3_Config(); USART2_Config();这两个函数即可

在调试这个代码时最核心的部分就是串口3的那个中断函数USART3_IRQHandler,刚开始的时候我是使用SendData(Usart2,data)将串口3接收到的数据用串口发送出去,但发现这样不行,最后再请教了别人之后,他让我使用了一个缓冲数组,并且用字符串发送的方式,最后成功了!

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 野火STM32F103开发板是一款基于STM32F103C8T6微控制器的开发板,其原理图用于描述开发板上各元器件的连接关系和工作原理。原理图通常包括主控芯片、外设模块、电源模块和外部接口等几个主要部分。 首先,原理图中的主控芯片是STM32F103C8T6微控制器,该芯片是基于ARM Cortex-M3内核的32位微控制器,具有丰富的外设资源和强大的处理性能。它是整个开发板的核心部分,负责执行用户程序的运行和控制各个外设模块的工作。 其次,原理图中的外设模块包括串口模块、蜂鸣器模块、LCD模块、按键模块等,这些外设模块可以为开发者提供丰富的功能扩展和实验环境。串口模块可以实现与PC机的通信,蜂鸣器模块可以产生声音提示,LCD模块可以显示图形和文字,按键模块可以进行各种输入操作等。 此外,原理图中还包括电源模块,用于为整个开发板提供稳定的电源。电源模块通常由直流电源和稳压电路组成,可以将外部电源经过稳压电路稳定在正常工作电压范围内,以保障各个电子元器件的正常工作。 最后,在原理图中还可以看到一些外部接口,例如USB接口、SD卡接口、JTAG接口和蓝牙接口等。这些接口可以方便开发者连接外部设备和扩展模块,实现更多功能和应用需求。 综上所述,野火STM32F103开发板的原理图是用于描述开发板上各个模块和电路的连接关系和工作原理的图纸,通过原理图可以清晰地了解开发板的硬件构造和工作方式,为开发者提供便利,以便开展相应的嵌入式软件开发和实验。 ### 回答2: 野火STM32F103开发板的原理图是一种用于STM32F103系列微控制器的硬件设计图纸。原理图描述了开发板上各个组件和元件的连接方式和电气联系。通过原理图,我们可以清晰地了解开发板的电路结构和设计。 在野火STM32F103开发板的原理图中,主要包括微控制器、外部时钟源、电源管理电路、各种外设和连接接口等。微控制器是整个系统的核心部件,它执行程序逻辑并控制外部设备的操作。外部时钟源提供系统时钟,确保微控制器运行的稳定性和准确性。电源管理电路用于稳定供电,保护各个电路模块的工作。 开发板上还包括了一些常见的外设模块,例如LED指示灯、按键、LCD显示屏、EEPROM等,这些外设可以用来进行功能拓展和开发实验。此外,开发板上还提供了多种连接接口,如USB接口、串口接口、I2C接口、SPI接口等,方便与外部设备和计算机进行通信。 通过查阅野火STM32F103开发板的原理图,我们可以了解到开发板上各个模块的电路连接方式、电源电压、信号引脚定义等信息,这对于开发者进行硬件调试和二次开发非常重要。同时,原理图也可以作为学习STM32F103微控制器硬件设计的参考,帮助我们更好地理解和掌握STM32F103系列微控制器的工作原理和应用。 ### 回答3: 野火STM32F103开发板是一款基于STM32F103C8T6芯片的开发板,原理图详细描述了板上各个元件之间的连接关系和电路设计。 在原理图中,首先可以看到STM32F103C8T6芯片,它是开发板的核心部分,负责处理器与外设之间的通信和控制。接下来,原理图详细展示了芯片的引脚连接,如电源引脚、GPIO引脚、串口引脚等,这些引脚将与开发板上的外部元件进行连接。 原理图还展示了开发板上的其他外设,如LED灯、按键、连接器等。这些外设的连接方式和接口也在原理图中详细标注,包括其引脚的连接关系和电路设计。 此外, 原理图还包括了电源电路的设计,包括稳压器、电容器等,用于提供稳定的电源供应给开发板和芯片。 通过查看原理图,我们可以了解到开发板上各个元件之间的连接方式和电路设计,从而更好地理解和使用开发板。同时,原理图也方便用户在开发过程中进行扩展,可以根据需求进行电路的调整和改进。 总之,野火STM32F103开发板原理图是设计者根据电路连接原则和外设要求设计的一张图纸,能够清晰展示出开发板上各个元件之间的连接关系和电路设计。通过查看和理解原理图,用户能够更好地使用这款开发板进行STM32F103C8T6芯片的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值