OpenEdv-开源电子网

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

关于串口的新手求助

[复制链接]

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-4-26
在线时间
19 小时
发表于 2018-3-5 19:57:03 | 显示全部楼层 |阅读模式
2金钱
767的 就是那个串口接收小试验 uart都正常 换成usart就不一样了 串口调试助手显示这个
串口接收654  再通过串口输出出来 但是用usart的话以16进制显示:3F 36 3F 3F 35 3F 3F 0D 3F   为什么中间会掺杂这些个3F,为什么4成0D了?
可是用uart做这个实验就很完美 是串口配置的问题吗?
123.png



我就是把给的实验代码中的uart改成了usart  问题出在哪 先谢谢解答的大佬

#include "sys.h"
#include "delay.h"
#include "usart.h"

u8 rdata[1];

USART_HandleTypeDef usart1_handler;


void uart1_init()
{
        usart1_handler.Instance=USART1;                                          
        usart1_handler.Init.BaudRate=115200;                                  
        usart1_handler.Init.WordLength=USART_WORDLENGTH_8B;  
        usart1_handler.Init.StopBits=USART_STOPBITS_1;          
        usart1_handler.Init.Parity=USART_PARITY_NONE;                  
//        usart1_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   
        usart1_handler.Init.Mode=USART_MODE_TX_RX;                  
        HAL_USART_Init(&usart1_handler);                                         

}

void HAL_USART_MspInit(USART_HandleTypeDef *huart)
{

        GPIO_InitTypeDef GPIO_Initure;
       
        if(huart->Instance==USART1)
        {
                __HAL_RCC_GPIOA_CLK_ENABLE();                       
                __HAL_RCC_USART1_CLK_ENABLE();                       
       
                GPIO_Initure.Pin=GPIO_PIN_9;                       
                GPIO_Initure.Mode=GPIO_MODE_AF_PP;               
                GPIO_Initure.Pull=GPIO_PULLUP;                       
                GPIO_Initure.Speed=GPIO_SPEED_FAST;               
                GPIO_Initure.Alternate=GPIO_AF7_USART1;       
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);          

                GPIO_Initure.Pin=GPIO_PIN_10;                       
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);                  
               
                HAL_NVIC_EnableIRQ(USART1_IRQn);               
                HAL_NVIC_SetPriority(USART1_IRQn,3,3);       
        }
}

void USART1_IRQHandler(void)   
{
        HAL_USART_IRQHandler(&usart1_handler);
       
//        while (HAL_UART_GetState(&usart1_handler) != HAL_UART_STATE_READY);
    while(HAL_USART_Receive_IT(&usart1_handler, (u8 *)rdata, 1) != HAL_OK);

}
       

void HAL_USART_RxCpltCallback(USART_HandleTypeDef *huart)
{
  u8 rec;
  if(huart->Instance==USART1)
  {
//        rec=*(--(huart->pRxBuffPtr));
                rec=rdata[0];
    HAL_USART_Transmit(&usart1_handler,&rec,1,1000);
  }

}

int main(void)
{

        Cache_Enable();           
        HAL_Init();                                     
        Stm32_Clock_Init(432,25,2,9);   
        delay_init(216);

        uart1_init();

        HAL_USART_Receive_IT(&usart1_handler, (u8 *)rdata, 1);
       
    while(1)
        {
               
        }
       
}


234.png

以16进制显示

以16进制显示
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-6 00:30:53 | 显示全部楼层
不会才对啊,你是同样对串口1配置?
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-4-26
在线时间
19 小时
 楼主| 发表于 2018-3-6 08:43:11 | 显示全部楼层
正点原子 发表于 2018-3-6 00:30
不会才对啊,你是同样对串口1配置?

是。。
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-4-26
在线时间
19 小时
 楼主| 发表于 2018-3-6 09:04:47 | 显示全部楼层
正点原子 发表于 2018-3-6 00:30
不会才对啊,你是同样对串口1配置?

123.png
这里pa9和pa10不是usart1的发送和接收吗 为什么代码里都换成usart就不对了啊。。。
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-6 11:27:42 | 显示全部楼层
UART:universal asynchronous receiver and transmitter通用异步收发器;
USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器。一般而言,单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口既可以用于同步串行通讯,也能用于异步串行通讯
查了下资料,又试了下,我的理解:
定义UART_HandlerTypeDef则是定义通用异步收发器的句柄,而定义USART_HandlerTypeDef则是定义同步收发器句柄,可以看到UART_Handler.Interface只能等于USART,所以定义同步和异步的区别就是在于句柄上来区分了,而不能用Interface这个接口来区分,所以,你把上面的UART都换成USART那么都换成同步收发器了,当然接收和发送就不对了。
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-6 11:28:45 | 显示全部楼层
同步和异步可以看这篇博客,写的很详细
http://blog.csdn.net/seashine_yan/article/details/71192283
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-4-26
在线时间
19 小时
 楼主| 发表于 2018-3-6 11:41:12 | 显示全部楼层
wangmingwei093 发表于 2018-3-6 11:27
UART:universal asynchronous receiver and transmitter通用异步收发器;
USART:universal synchronous a ...

可我句柄就是用的usart啊  那我要用usart的话应该怎么做呢
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-6 13:05:21 | 显示全部楼层
菜狗子 发表于 2018-3-6 11:41
可我句柄就是用的usart啊  那我要用usart的话应该怎么做呢

句柄用UART才行吧
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-4-26
在线时间
19 小时
 楼主| 发表于 2018-3-6 13:16:27 | 显示全部楼层

用uart的话 接收中断处理 使能就也得用uart了 不然报错  
比如说中断接收使能既有HAL_USART_Receive_IT 又有HAL_UART_Receive_IT
那么我想用第一个usart来进行这个实验需要怎么做呢 句柄是uart的话 那这些函数也只能是uart啊 不然会报错的
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-4-26
在线时间
19 小时
 楼主| 发表于 2018-3-6 13:23:27 | 显示全部楼层
正点原子 发表于 2018-3-6 00:30
不会才对啊,你是同样对串口1配置?

网上说配置uart和usart是一样的啊 为什么实验结果会不同
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-6 13:58:55 | 显示全部楼层
菜狗子 发表于 2018-3-6 13:23
网上说配置uart和usart是一样的啊 为什么实验结果会不同

我那么理解的好像不对,不过我试了下,确实设置成USART的时候就不对了
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-6 14:03:20 | 显示全部楼层
菜狗子 发表于 2018-3-6 13:23
网上说配置uart和usart是一样的啊 为什么实验结果会不同

同步和异步传输方式是不一样的,我没用过,句柄是USART_Handler的话,配置肯定就不是这么配置了,你看UART_Handler和USART_Handler的参数有不一样的地方,所以区别肯定是有的
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-4-26
在线时间
19 小时
 楼主| 发表于 2018-3-6 14:30:52 | 显示全部楼层
wangmingwei093 发表于 2018-3-6 14:03
同步和异步传输方式是不一样的,我没用过,句柄是USART_Handler的话,配置肯定就不是这么配置了,你看UAR ...

可网上说这俩配置是一样的啊。。。。
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-6 14:38:03 | 显示全部楼层
菜狗子 发表于 2018-3-6 14:30
可网上说这俩配置是一样的啊。。。。

额,你自己看呀。。。。网上说的对不对,你按照网上说的看看呀,你自己跳到这两个结构体里看看不就知道一不一样了嘛。。。。一定自己找找看,你看看这两个结构体一样不!!!!
USAR1.jpg
UART1.jpg
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-6 14:43:51 | 显示全部楼层
wangmingwei093 发表于 2018-3-6 14:38
额,你自己看呀。。。。网上说的对不对,你按照网上说的看看呀,你自己跳到这两个结构体里看看不就知道一 ...

我一会儿再试试看,我以前也没注意这块,现在确实也是有很多疑问,因为句柄接口Instance只有一个USART,所以我怀疑句柄是不能随便用的,反正我换了句柄发送和接收就不对
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 06:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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