This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

UART0的irda问题,怎么开启iRDA功能?



#include "TM4C.h"

int main(void)
{
uint8_t cnt;
MAP_SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_INT|SYSCTL_MAIN_OSC_DIS);
MAP_SysCtlDelay(1);

MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);


MAP_GPIOPinConfigure(GPIO_PA0_U0RX);
MAP_GPIOPinConfigure(GPIO_PA1_U0TX);

MAP_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
MAP_UARTConfigSetExpClk(UART0_BASE,MAP_SysCtlClockGet(), 2400,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));


MAP_UARTEnable(UART0_BASE);

while(1)
{
MAP_UARTCharPut(UART0_BASE, cnt++);
while(MAP_UARTIntStatus(UART0_BASE, false) == UART_INT_TX);
MAP_UARTIntClear(UART0_BASE, UART_INT_TX);
}

}

UART0的irda问题,怎么开启iRDA功能?

加入代码:UARTEnableSIR(UART0_BASE, 0);

PA1无波形输出,在添加上面代码前,有正确串口通信波形。

ex8-UART0.zip
  • 我以前USART3,你可以看看

    #define USART_IrDA USART3  
      /*打开USART_IrDA的相关时钟==============================================================*/
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART_IrDA, ENABLE);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

      USART_InitTypeDef USART_InitStructure;//用于USART设备初始化
      USART_ClockInitTypeDef USART_ClockInitStructure;//用于USART时钟初始化
      GPIO_InitTypeDef GPIO_InitStructure;///用于GPIO初始化

      /*打开USART_IrDA,即红外接口==========================================================*/
      USART_InitStructure.USART_BaudRate = 120000;
      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;
      USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
      USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
      USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
      USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
      
      USART_Init(USART_IrDA, &USART_InitStructure);
      USART_ClockInit(USART_IrDA,&USART_ClockInitStructure);
      
      USART_Cmd(USART_IrDA, ENABLE);
      /* Set the USART3 prescaler */
      USART_SetPrescaler(USART_IrDA, 0x1);
      /* USART3设置为IrDA*/
      USART_IrDAConfig(USART_IrDA, USART_IrDAMode_Normal);
      /*USART3使能IrDA*/
      USART_IrDACmd(USART_IrDA, ENABLE);
      /*此时USART3的中断还未打开,将在main()中连接后打开*/


      /*打开USART_IrDA所用到的IO,这里就只能自己设置了,宏帮不了忙..= = =======================*/
      /*USART3的PB10为复用端口推挽输出*/
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
      GPIO_Init(GPIOB, &GPIO_InitStructure);
      
      /*USART3的PB11为复用端口浮空输入*/
      /* Configure USART3 Rx PB.11 as input floating */
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOB, &GPIO_InitStructure);

      /*开启USART3的接收和发送完成中断*/
      USART_ITConfig(USART_IrDA, USART_IT_TC, ENABLE);
      USART_ITConfig(USART_IrDA, USART_IT_RXNE, ENABLE);