小弟初学STM32F以前玩过51单片机,现在搞这个对使用ST的库相对还不是很适应,按照教程创建了一个MDK工程,添加了V3.5的库,main里做了GPIO测试没有问题,但是使用UART却出了问题,我使用的是STM32F107VCT6,使用它的USART1端口重新映射到了PB6,PB7,我打算不断发送一个字节0x24,可是我用PC收到的却是0xF9,搞了好几天都没搞定,求助各位大侠指点,谢谢啦~~~~~~~~!!!!
代码如下:
void usart_init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//串口1重映射 // USART1_TX -> PB6 , USART1_RX -> PB7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); USART_StructInit(&USART_InitStructure); USART_InitStructure.USART_BaudRate = 115200; //设置波特率为115200// USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置数据位为8位// USART_InitStructure.USART_StopBits = USART_StopBits_1; //设置停止位为1位// USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位// USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //发送与接收// USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None; //没有硬件流控// USART_Init(USART1, &USART_InitStructure); //对串口1进行初始化 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //接收的中断使能打开: USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //发送的中断使能打开 USART_Cmd(USART1 , ENABLE);
}
//发送函数
void SendByte(char ch) { USART_SendData(USART1, (char) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} }
//延时函数
void Delay(void) { unsigned long ik; for(ik=0;ik<0xffff8;ik++); }
//指示灯初始化
void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStruct);
}
//main
int main (void) { /* Setup STM32 system (clock, PLL and Flash configuration) */ SystemInit(); GPIO_Config(); usart_init(); while (1) { GPIO_SetBits(GPIOB,GPIO_Pin_0); GPIO_SetBits(GPIOB,GPIO_Pin_1); GPIO_SetBits(GPIOB,GPIO_Pin_14); GPIO_SetBits(GPIOB,GPIO_Pin_15); Delay(); Delay(); Delay(); GPIO_ResetBits(GPIOB,GPIO_Pin_0); GPIO_ResetBits(GPIOB,GPIO_Pin_1); GPIO_ResetBits(GPIOB,GPIO_Pin_14); GPIO_ResetBits(GPIOB,GPIO_Pin_15); Delay(); Delay(); Delay(); SendByte(0x24); } }
|