野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19503|回复: 4

串口发送汉字问题

[复制链接]
发表于 2020-9-13 15:10:59 | 显示全部楼层 |阅读模式
用火哥例程发送汉字完全没问题  
但是我自己编的发送汉字就出现的乱码如图



#include "TEST_UART.h"
#include "stm32f10x.h"

static void NVIC_config()
{
        NVIC_InitTypeDef NVIC_struct;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        NVIC_struct.NVIC_IRQChannel = USART1_IRQn;
        NVIC_struct.NVIC_IRQChannelCmd = ENABLE;
        NVIC_struct.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_struct.NVIC_IRQChannelSubPriority= 1;
        NVIC_Init(&NVIC_struct);
}
void UARTconfig()
{
        USART_InitTypeDef USART_struct;
        GPIO_InitTypeDef GPIO_struct;
        //开启时钟 GPIO  USART AFIO
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
       
        //初始化GPIO配置        TX RX
        //TX
        GPIO_struct.GPIO_Pin = GPIO_Pin_9;
        GPIO_struct.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_struct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_struct);
        //RX
        GPIO_struct.GPIO_Pin = GPIO_Pin_10;
        GPIO_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
       
        GPIO_Init(GPIOA,&GPIO_struct);
       
        //初始化USART
        USART_struct.USART_BaudRate = 115200;
        USART_struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_struct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
        USART_struct.USART_Parity = USART_Parity_No;
        USART_struct.USART_StopBits = USART_StopBits_1;
        USART_struct.USART_WordLength = USART_WordLength_8b;
        USART_Init(USART1,&USART_struct);
        //初始化NVIC
        NVIC_config();
//使能串口接收中断
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
        //使能串口
        USART_Cmd(USART1,ENABLE);
}
void SendByte(USART_TypeDef* USARTx,uint8_t data)
{
        USART_SendData(USARTx,data);
        while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);
}



void SendString(USART_TypeDef* USARTx,char *string)
{
        unsigned int k=0;
        do
        {
        SendByte(USARTx,*(string+k));
                k++;
        }while(*(string+k)!='\0');
        while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET)
  {}
       
}
void SendHalfWord(USART_TypeDef* USARTx,uint16_t data)
{
        uint8_t Htemp,Ltemp;
        Htemp=data>>8;
        Ltemp=(data & 0x00ff);
        SendByte(USARTx,Htemp);
        while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
        SendByte(USARTx,Ltemp);
        while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
       
}
///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
                /* 发送一个字节数据到串口 */
                USART_SendData(USART1, (uint8_t) ch);
               
                /* 等待发送完毕 */
                while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);               
       
                return (ch);
}

///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
                /* 等待串口输入数据 */
                while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

                return (int)USART_ReceiveData(USART1);
}

//void SendWord(USART_TypeDef* USARTx,uint32_t data)
//{
//       
//}

野火论坛202009131509476520..png
野火论坛202009131509227015..png
回复

使用道具 举报

发表于 2020-9-14 08:51:35 | 显示全部楼层
将keil的编码方式更换为GB2312或者ANSI试一下
野火论坛202009140850412137..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-14 10:48:28 | 显示全部楼层
H781997429 发表于 2020-9-14 08:51
将keil的编码方式更换为GB2312或者ANSI试一下

谢谢老哥解答!  但是还是没有解决    本来用的就是GB2312 换成ANSI还是不行  
回复 支持 反对

使用道具 举报

发表于 2020-9-14 17:54:29 | 显示全部楼层
UTF8- -



回复

使用道具 举报

 楼主| 发表于 2020-9-17 15:39:20 | 显示全部楼层
在微软商店里重新下载了一个调试助手  显示正常了
可能就是编码方式的问题吧     但是使用火哥的显示例程就正常       如果有人知道详细原因    恳请指教!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 06:37 , Processed in 0.040583 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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