串口配置的部分程序:
static void USART_Config(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOC and GPIOE clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC , ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE , ENABLE);
/* Enable USART1 APB clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
/* USART1 Pins configuration
************************************************/
/* Connect pin to Periph */
GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_7);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource1, GPIO_AF_7);
/* Configure pins as AF pushpull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
这是官方下载的例子,我跑这个例子,用串口调试助手检查不到端口。
对于F3串口初始还有几点疑惑:
1:通过查看手册发现STM32有两个,USART1:PC3、PC4和PE0、PE1.为什
么要设两个呢?而且上面例子中,UARTTX选择PC4,UARTRX选择PE1,这
又是为什么?
2:上面USART1 Pins两个都配置成了推免输出,我查看以一下其他STM32的串口是这样配置的,串口TX对应I/O口配置成推免输出模式,RX口配置成浮空,如:
这是芯达STM32入门系列教程USART串口编程里的配置:
结构的成员设置如下:
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA , &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
上面那个配置成推免,下面配置成GPIO_Mode_IN_FLOATING。但我的stm32f30x_gpio.h的文件里对于GPIO_Mode模式里并没有GPIO_Mode_IN_FLOATING选项,于是我修改成下面形式,不知道是否表示浮空
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);
但结果烧写完程序还是无法检测到串口工作。请高手指点
|