初中生
最后登录1970-1-1
在线时间 小时
注册时间2020-9-4
|
用火哥例程发送汉字完全没问题
但是我自己编的发送汉字就出现的乱码如图
#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)
//{
//
//}
|
-
-
|