有谁弄成功的吗?我试了串口1没反应,串口2,3都是乱码,只显示一个 “帱” 字,不解,STM32F103都正常,说明软件设置什么的没有问题,硬件也没有问题
void USART2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* Enable GPIO clock */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
/* Enable UART clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
/* Connect PXx to USARTx_Tx*/
GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_USART3);
/* Connect PXx to USARTx_Rx*/
GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_USART3);
/* Configure USART Tx as alternate function */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* Configure USART Rx as alternate function */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* USART configuration */
USART_InitStructure.USART_BaudRate = 2400;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3, &USART_InitStructure);
/* Enable USART */
USART_Cmd(USART3, ENABLE);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
回复【11楼】tanghong668:
---------------------------------
果然是这里出了问题,谢谢两位,呵呵,现在不乱码了
举例
程序从串口输出:
USART_Send(USART1, "ABCDEF");
USART_Send(USART1, "123456");
接收到正确数据应该为:
41 42 43 44 45 46 31 32 33 34 35 36
计算机串口接收到数据【十六进制】
81 82 83 84 85 86 71 72 73 74 75 76 [看似差了0x40]
很奇怪有没有,想不出原因。。。
USART_Send()函数实现
void USART_Send(USART_TypeDef *USARTx, char *str)
{
uint16_t ch;
while (*str)
{
ch = *str++;
USART_SendData(USARTx, ch);
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}
}
如果将其修改为
void USART_Send(USART_TypeDef *USARTx, char *str)
{
uint16_t ch;
while (*str)
{
ch = *str++;
USART_SendData(USARTx, ch - 0x40); //此处有修改,减去0x40
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}
}
计算机串口接收到数据为
01 02 03 04 05 06 F1 F2 F3 F4 F5 F6
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
这一段的外晶振设置也已经改为板载晶振
这很诡异,有没有
求高手解惑
---------------------------------
为什么要配置这个时钟呢,我对比了一下103的stm32f4xx_conf.h中的配置,103就不需要配置这个时钟,为什么
一周热门 更多>