小弟初学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);
}
}
此帖出自
小平头技术问答
一周热门 更多>