高级会员

- 积分
- 614
- 金钱
- 614
- 注册时间
- 2012-7-6
- 在线时间
- 0 小时
|
UART3和SPI2有冲突,要把SPI的时钟关掉。
仔细分析程序,最有可能的就是rcc了,我把她们全都打开了,结果我逐一调试,发现
RCC_APB1Periph_I2C1,RCC_APB1Periph_I2C2打开导致usart3不正常,RCC_AHBPeriph_SDIO打开导致usart4不正常,想的可能是管脚冲突,打开管教定义,呵呵,的确如此。
usart1是APB2,USART2,3,UART4,5都是APB1的, 这个不会搞错的。
一般来说,代码要处理一下几部分内容:
1)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
2)NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
3)/* Configure UART4 Rx (PC.11) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* Configure UART4 Tx (PC.10) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
4)USART_InitStructure.USART_BaudRate = 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;
5)USART_Init(UART4, &USART_InitStructure);
/* Enable USART4 Receive and Transmit interrupts */
USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
/* Enable the USART4 */
USART_Cmd(UART4, ENABLE);

http://www.y-ec.com/down/class/
|
|