初级会员

- 积分
- 160
- 金钱
- 160
- 注册时间
- 2019-9-16
- 在线时间
- 24 小时
|
15金钱
F407ZGT6的板子,串口1接收数据时很奇怪,串口1自发自收,发送0XAA,0X55,0XBB,0XCC收到的数据很奇怪。
55bbcccc 打印出来是这个样子。我的程序问题在哪?大佬帮忙看一下,还有一个问题,官方的407例程用我们公司板子,一个都启不起来,很奇怪。
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
ccaa55bb
55bbcccc
bbccccaa
ccccaa55
void USART1_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
/* 第1步:打开GPIO和USART部件的时钟 */
RCC_AHB1PeriphClockCmd(UART1_GPIO_RCC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);
GPIO_PinAFConfig(UART1_GPIO, UART1_TX_PIN_SOURCE, GPIO_AF_USART1);
GPIO_PinAFConfig(UART1_GPIO, UART1_RX_PIN_SOURCE, GPIO_AF_USART1);
GPIO_InitStructure.GPIO_Pin = UART1_GPIO_TX ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = UART1_GPIO_RX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;// 115200
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(USART1, &USART_InitStructure);
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_Init(USART1, &USART_InitStructure);
/* 第5步:使能 USART, 配置完毕 */
USART_ClockInit(USART1, &USART_ClockInitStructure);
USART_Cmd(USART1, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //USART3全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//设置USART1在NVIC_IRQChannel中的抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //设置USART1在NVIC_IRQChannel中的响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //USART1中断使能
NVIC_Init(&NVIC_InitStructure);
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
}
/*******************************************************************************
* Function Name : USARTx_IRQHandler
* Description : This function handles USART1 global interrupt request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void USART1_IRQHandler(void)
{
extern u8 UART1_RxBuffer[32];
static u16 Rx1Count=0;
if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
{
(uint16_t)(USART1->DR & (uint16_t)0x01FF);
}
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
UART1_RxBuffer[Rx1Count++] = USART_ReceiveData(USART1);
if(Rx1Count > RxLen)
{
Rx1Count = 0x00;
Uart1RxFlag=1;
}
USART_ClearFlag(USART1, USART_FLAG_RXNE);
}
}
|
|