|
产品要用到5个串口,选择互联型的105作为主控MCU,105RBT6是MD密度的,为了能用上UART4和UART5,必须用HD的启动文件,现在UART1 2 3已经正常使用了,都用的中断方式,但是按照同样的办法初始化UART4,也是用的中断方式,串口能进入发送中断,但是用示波器看波形,就是没有数据发出,下面贴出代码:
void Uart4_MyInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
//Configure UART4 Rx(PC.11) as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
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);
USART_InitStructure.USART_BaudRate = 19200; //19200 bps
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8 Bits
USART_InitStructure.USART_Parity = USART_Parity_No; //One Stop Bit
USART_InitStructure.USART_StopBits = USART_StopBits_1; //One Stop Bit
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Hardware flow control disabled (RTS and CTS signals)
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //Receive and transmit enabled
USART_Init(UART4, &USART_InitStructure);
USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
USART_Cmd(UART4, ENABLE);
}
上面是UART4的初始化代码,下面是中断处理函数
void UART4_IRQHandler(void)
{
u8 i;
if(USART_GetITStatus(UART4, USART_IT_RXNE) == SET) //接收中断
{
i = UART4->DR;
sMyUart4.rxBuf[sMyUart4.rxTotal++] = i;
}
if(USART_GetITStatus(UART4, USART_IT_TC) == SET) //发送中断
{
if(sMyUart4.txNum < sMyUart4.txTotal)
{
UART4->DR = sMyUart4.txBuf[sMyUart4.txNum++]; //???
}
else
{
USART_ITConfig(UART4, USART_IT_TC, DISABLE);
}
}
}
用UART4轮询设备的时候,每次发指令都能进入 //??? 处的中断,说明发送逻辑是对的,进入中断的次数也是对的,但是就是没有波形输出,百度了下,发现有好多网友都有过这个问题,但是没有找到有效的答案,用的是350的标准库,不知道硬汉有没有遇到这个问题
|
|