关于串口的新手求助

2019-07-20 09:22发布

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)
        {
               
        }
       
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
wangmingwei093
1楼-- · 2019-07-21 04:52
菜狗子 发表于 2018-3-6 11:41
可我句柄就是用的usart啊  那我要用usart的话应该怎么做呢

句柄用UART才行吧
菜狗子
2楼-- · 2019-07-21 09:24
 精彩回答 2  元偷偷看……
菜狗子
3楼-- · 2019-07-21 13:47
 精彩回答 2  元偷偷看……
wangmingwei093
4楼-- · 2019-07-21 18:05
菜狗子 发表于 2018-3-6 13:23
网上说配置uart和usart是一样的啊 为什么实验结果会不同

我那么理解的好像不对,不过我试了下,确实设置成USART的时候就不对了
wangmingwei093
5楼-- · 2019-07-21 19:46
菜狗子 发表于 2018-3-6 13:23
网上说配置uart和usart是一样的啊 为什么实验结果会不同

同步和异步传输方式是不一样的,我没用过,句柄是USART_Handler的话,配置肯定就不是这么配置了,你看UART_Handler和USART_Handler的参数有不一样的地方,所以区别肯定是有的
菜狗子
6楼-- · 2019-07-21 22:51
 精彩回答 2  元偷偷看……

一周热门 更多>