OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5477|回复: 1

STM32F429视频教程,串口接收实验,编译下载都正常,但点击发送后串口助手无接收现象,下面为程序

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2021-4-16
在线时间
0 小时
发表于 2021-4-16 10:50:56 | 显示全部楼层 |阅读模式
1金钱
#include "sys.h"
#include "delay.h"
#include "usart.h"
u8 rdata[1];
UART_HandleTypeDef usart1_handle;

//步骤1:调用此函数对串口进行初始化,此函数会调用下面的Msp函数
void uart1_init()
{ usart1_handle.Instance=USART1;
usart1_handle.Init.BaudRate=115200;            //定义波特率
usart1_handle.Init.WordLength=UART_WORDLENGTH_8B;    //数据位为8位
usart1_handle.Init.StopBits=UART_STOPBITS_1;         //停止位为1位
usart1_handle.Init.HwFlowCtl=UART_HWCONTROL_NONE;    //无硬件流控
usart1_handle.Init.Mode=UART_MODE_TX_RX;             //模式为收发模式
usart1_handle.Init.Parity=UART_PARITY_NONE;          //没有奇偶校验位
HAL_UART_Init(&usart1_handle);                       //HAL_UART_Init()使能UART1
}

//源文件中定义了此函数的弱函数,此处需要重新定义,此函数在HAL_UART_Init()中调用
void HAL_USART_MspInit(USART_HandleTypeDef *huart)   
{
GPIO_InitTypeDef GPIO_Initure;
//首先判断是哪一个串口
if(huart->Instance==USART1)
{
  
  //步骤2:时钟使能,串口相关IO口配置,复用配置
  
   __HAL_RCC_GPIOA_CLK_ENABLE();     //使能GPIOA时钟
  __HAL_RCC_USART1_CLK_ENABLE();   //使能USART1时钟

  
  GPIO_Initure.Pin=GPIO_PIN_9;   //A9
  GPIO_Initure.Mode=GPIO_MODE_AF_PP;  //复用推挽输出
  GPIO_Initure.Pull=GPIO_PULLUP;   //上拉
  GPIO_Initure.Speed=GPIO_SPEED_HIGH;  //高速
  GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为USART1
  HAL_GPIO_Init(GPIOA,&GPIO_Initure);    //HAL_GPIO_Init()函数配置A9
  
  GPIO_Initure.Pin=GPIO_PIN_10;
  HAL_GPIO_Init(GPIOA,&GPIO_Initure);    //HAL_GPIO_Init()函数配置A10
  
  //步骤3:串口接收中断优先级配置和使能
  HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占和响应都设置3,可设0~3,数越小优先级越大,前抢占,后响应
  HAL_NVIC_EnableIRQ(USART1_IRQn);       //使能中断通道
  
}
}
//中断服务函数
void USART1_IRQHandler(void)         
{
HAL_UART_IRQHandler(&usart1_handle);//执行完此函数会自动关闭中断,因此下一行代码开启接收中断
HAL_UART_Receive_IT(&usart1_handle,rdata,sizeof(rdata));
}
//编写接收中断回调函数,HAL_UART_IRQHandler()count位为0时执行此函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  //court位为0时执行此函数,此程序设置为1,实现单个数据执行一次中断
{
u8 rec;
if(huart->Instance==USART1)
  {rec=*((huart->pRxBuffPtr)-1);
   //或rec=rdata[0];
  HAL_UART_Transmit(&usart1_handle,&rec,1,1000 );  //发送数据
  }
}
int main(void)
{
HAL_Init();
Stm32_Clock_Init(360,25,2,8);  //设置时钟,180Mhz
delay_init(180);

//调用此函数完成步骤1、2、3
uart1_init();

//步骤4:使能接收中断
HAL_UART_Receive_IT(&usart1_handle,rdata,sizeof(rdata));    //使能串口接收中断
  while(1)
  {
  //等待接收中断指令,
//  HAL_UART_Transmit(&usart1_handle,buff,sizeof(buff),1000 );
//  
//  delay_ms(300);
   }
} QQ截图20210416104938.png

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2021-4-16 17:12:05 | 显示全部楼层
烧录官方的串口例程可以输出吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 04:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表