OpenEdv-开源电子网

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

407串口程序不能接收

[复制链接]

15

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2016-1-13
在线时间
29 小时
发表于 2017-5-19 19:55:43 | 显示全部楼层 |阅读模式
10金钱
参考429hal阿波罗串口例程,用stm32cube在原子407的板子上想实现串口收发,但是在调试助手中无法输入,只有一些预设的输出。程序如下


#include "stm32f4xx_hal.h"
#include "usart.h"
#include "gpio.h"
#include "sys.h"
void SystemClock_Config(void);
void Error_Handler(void);
int main(void)
{while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

                       
       if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
                        printf("\r\n您发送的消息为:\r\n");
                        HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);        //发送接收到的数据
                        while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);                //等待发送结束
                        printf("\r\n\r\n");//插入换行
                        USART_RX_STA=0;
                }
                else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf("\r\nALIENTEK 阿波罗STM32F429开发板 串口实验\r\n");
                                printf("正点原子@ALIENTEK\r\n\r\n\r\n");
                        }
                        if(times%200==0)printf("请输入数据,以回车键结束\r\n");  
//                        if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
                         HAL_Delay(10);   
                }
               
  }
  /* USER CODE END 3 */

}





省略掉后续void SystemClock_Config(void),void Error_Handler(void),void assert_failed(uint8_t* file, uint32_t line)等函数。

360截图20170519195500097.jpg

最佳答案

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

使用道具 举报

15

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2016-1-13
在线时间
29 小时
 楼主| 发表于 2017-5-19 19:55:44 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-21 19:07:37 | 显示全部楼层
仿真对比下寄存器差异
回复

使用道具 举报

15

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2016-1-13
在线时间
29 小时
 楼主| 发表于 2017-5-24 09:05:14 | 显示全部楼层
正点原子 发表于 2017-5-21 19:07
仿真对比下寄存器差异

USART_RX_STA&0x8000始终为零,导致下面的if函数不执行,我现在怀疑是中断设置的可能有问题
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3567
金钱
3567
注册时间
2016-1-8
在线时间
544 小时
发表于 2017-5-24 09:51:59 | 显示全部楼层
放浪的形骸 发表于 2017-5-24 09:05
USART_RX_STA&0x8000始终为零,导致下面的if函数不执行,我现在怀疑是中断设置的可能有问题

你调用usart回调函数没,这个函数管接收
回复

使用道具 举报

15

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2016-1-13
在线时间
29 小时
 楼主| 发表于 2017-5-24 11:31:36 | 显示全部楼层
Sun_Fly 发表于 2017-5-24 09:51
你调用usart回调函数没,这个函数管接收

主函数调用的HAL_Init()里包含了HAL_MspInit();里面定义如下void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(uartHandle->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_USART1_CLK_ENABLE();
  
    /**USART1 GPIO Configuration   
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* Peripheral interrupt init */
                #if EN_USART1_RX

    HAL_NVIC_SetPriority(USART1_IRQn, 3, 3);
    HAL_NVIC_EnableIRQ(USART1_IRQn);
                #endif       

  /* USER CODE BEGIN USART1_MspInit 1 */

  /* USER CODE END USART1_MspInit 1 */
  }
所以该调用的我也调用了,cube生成的模板貌似不用那个HAL_UART_RxCpltCallback
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3567
金钱
3567
注册时间
2016-1-8
在线时间
544 小时
发表于 2017-5-24 11:35:08 | 显示全部楼层
你多看看教程,CUBE生成的没有,那是应为他不接收,只发送,你要接收就要用到这个back函数、
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2017-5-24 11:44:27 来自手机 | 显示全部楼层
串口就那么几个寄存器,看看手册就搞定了,干嘛非得死咬着cube和hal啊?都是别人的代码,能用你是省事了,要是不能用,你去debug别人的代码一定是又费时又费力!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 21:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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