阿波罗STM32F429开发板关于USART3的应用(WIFI/蓝牙/GPS)

其实在开发板使用的WIFI(ESP8266模块)、蓝牙、GPS都是封装好的模块,根据一些特定指令就即可进行相关操作。如使用AT指令就可以操作WIFI模块。至于具体的wifi模块的AT指令如何使用这里就不说了,改天另外写一个博客吧。
这里主要是就是写USART3的应用,通过USART3接收数据转到USART1打印到串口调试助手。
其实搞这个的话,主要是就是通过所使用的模块与USART3连接,通过CPU连接到USART1转发到PC

1.硬件配置

首先就是在CUBEMX上对管脚进行相应的配置。下面是管脚的配置图
在这里插入图片描述
串口1使用的是默认设置。
在这里插入图片描述
USART3也是,但是如果要使用GPS的话波特率是要设置为38400 Bits/s,这个是因为ATK_S1216F8_BD模块的出厂默认波特率就是这个。因为涉及到接收和发送,特别是串口的接收是涉及到接收中断的,下面就是关于定时器的配置,在这里使用的是通用定时器7.
在这里插入图片描述
由于在整个工作过程中存在优先级的问题(如果没有优先级之分工作就会因此冲突。)所以这里要设置优先级
在这里插入图片描述
接下来就是生成工程啦。

2.修改程序

在usart.c文件的中加入Printf的重定义函数

struct __FILE 
{
    
	int handle; 
}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{
    
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{
    	
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
	USART1->DR = (uint8_t) ch;      
	return ch;
}


uint16_t USART3_RX_STA=0;
uint8_t USART3_RX_BUF[800];
__align(8) uint8_t USART3_TX_BUF[800];

并且在USART3的USART3_MspInit函数中加入USART3的接收函数

  /* USER CODE BEGIN USART3_MspInit 1 */
		__HAL_UART_ENABLE_IT(&huart3,UART_IT_RXNE);		//开启接收中断
		HAL_NVIC_EnableIRQ(USART3_IRQn);				//使能USART3中断
		HAL_NVIC_SetPriority(USART3_IRQn,2,3);			//抢占优先级2,子优先级3	
		MX_TIM7_Init();		//100ms中断
		USART3_RX_STA=0;		//清零
		//TIM7->CR1&=~(1<<0);        //关闭定时器7
		__HAL_TIM_DISABLE(&htim7); 

然后在/* USER CODE BEGIN 1 */加入串口的重定

/* USER CODE BEGIN 1 */

void u3_printf(char* fmt,...)  
{
     
	
	uint16_t i,j; 
	va_list ap; 
	va_start(ap,fmt);
	vsprintf((char*)USART3_TX_BUF,fmt,ap);
	va_end(ap);
	i=strlen((const char*)USART3_TX_BUF);		//此次发送数据的长度
	for(j=0;j<i;j++)							//循环发送数据
	{
   
		while((USART3->SR&0X40)==0);			//循环发送,直到发送完毕   
		USART3->DR=USART3_TX_BUF[j];  
	} 
}

/* USER CODE END 1 */

修改完串口的程序之后就是定时器的了

/* TIM7 init function */
void MX_TIM7_Init(void)
{
   
  TIM_MasterConfigTypeDef sMasterConfig = {
   0};

  htim7.Instance = TIM7;
  htim7.Init.Prescaler = 8999;
  htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim7.Init.Period = 999;
  htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
  {
   
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
  {
   
    Error_Handler();
  }
		HAL_TIM_Base_Start_IT(&htim7);   //使能定时器7和定时器7更新中断:TIM_IT_UPDATE   
}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
   

  if(tim_baseHandle->Instance==TIM7)
  {
   
  /* USER CODE BEGIN TIM7_MspInit 0 */

  /* USER CODE END TIM7_MspInit 0 */
    /* TIM7 clock enable */
    __HAL_RCC_TIM7_CLK_ENABLE();

    /* TIM7 interrupt Init */
     HAL_NVIC_SetPriority(TIM7_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(TIM7_IRQn);
  /* USER CODE BEGIN TIM7_MspInit 1 */
		HAL_NVIC_SetPriority(TIM7_IRQn,0,1);    //设置中断优先级,抢占优先级0,子优先级1
		HAL_NVIC_EnableIRQ(TIM7_IRQn)
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值