I had some problems to put DHT11 to communicate with TM4C1294XL launchpad, so I am sharing the code... Its not very polished, but, works, and can be used as base for someone that wants to test.
The code was based on (http://forum.stellarisiti.com/topic/1929-dht11-temperature-humidity-sensor-code-snippet/) that did not work well on TM4C1294 (thanks any way!!) :(
#include <stdint.h> #include <stdbool.h> #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/gpio.h" #include "drivers/pinout.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/rom_map.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "driverlib/timer.h" #include "utils/uartstdio.h" int temp; int humidity; uint32_t g_ui32SysClock; #ifdef DEBUG void __error__(char *pcFilename, uint32_t ui32Line) { } #endif void ConfigureUART(void) { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); ROM_GPIOPinConfigure(GPIO_PA0_U0RX); ROM_GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTStdioConfig(0, 115200, g_ui32SysClock); } int ReadDHT() { // bit buffers & timeout char bitcount; char byte; char bits[5] = {0,0,0,0,0}; unsigned int bitints[6]; long timerval; int clockMhz; unsigned int loopCnt = 10000; #define MY_PIN_PERIPH SYSCTL_PERIPH_GPIOM #define MY_PIN_PORTBASE GPIO_PORTM_BASE #define MY_PINNR GPIO_PIN_6 #define MY_TIMER_PERIPH SYSCTL_PERIPH_TIMER0 #define MY_TIMERBASE TIMER0_BASE #define MY_TIMER TIMER_B SysCtlPeripheralEnable(MY_TIMER_PERIPH); TimerConfigure(MY_TIMERBASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_ONE_SHOT); SysCtlPeripheralEnable(MY_PIN_PERIPH); ROM_GPIOPinTypeGPIOOutput(MY_PIN_PORTBASE, MY_PINNR); GPIOPinWrite(MY_PIN_PORTBASE, MY_PINNR, 0x0); // #loops = loops_per_us*time_in_us = time in us * loops/us = time_in_us *(clockfreq/10000000) SysCtlDelay((g_ui32SysClock/3)/30 ); // -> 30 ms ROM_GPIOPinTypeGPIOInput(MY_PIN_PORTBASE, MY_PINNR); loopCnt = g_ui32SysClock/100; while(GPIOPinRead(MY_PIN_PORTBASE, MY_PINNR)) { loopCnt = loopCnt -1; if (loopCnt == 0) return 0; } loopCnt = g_ui32SysClock/100; while(!(GPIOPinRead(MY_PIN_PORTBASE, MY_PINNR))) //0 { loopCnt = loopCnt -1; if (loopCnt == 0) return 0; } loopCnt = g_ui32SysClock/100; while(GPIOPinRead(MY_PIN_PORTBASE, MY_PINNR)) { loopCnt = loopCnt -1; if (loopCnt == 0) return 0; } // start receiving 40 bits char i; bitcount = 7; byte = 0; int conta = 0; int timerval2=0; int largest = 0; int lowest = 99999; for (i=0; i < 40; i++) { loopCnt = g_ui32SysClock/100; while(!(GPIOPinRead(MY_PIN_PORTBASE, MY_PINNR))) { loopCnt = loopCnt -1; if (loopCnt == 0) return 0; } TimerDisable(MY_TIMERBASE, MY_TIMER); TimerConfigure(MY_TIMERBASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_ONE_SHOT); TimerLoadSet(MY_TIMERBASE, MY_TIMER, g_ui32SysClock/4000); TimerEnable(MY_TIMERBASE, MY_TIMER); timerval = TimerValueGet(MY_TIMERBASE, MY_TIMER); loopCnt = g_ui32SysClock/100; while(GPIOPinRead(MY_PIN_PORTBASE, MY_PINNR)) { loopCnt = loopCnt -1; if (loopCnt == 0) return 0; } timerval2 = TimerValueGet(MY_TIMERBASE, MY_TIMER); conta = timerval - timerval2; if (conta>largest) largest = conta; if (conta<lowest) lowest = conta; if ((conta) > (1000)) bits[byte] |= (1 << bitcount); if (bitcount == 0) { bitcount = 7; byte++; }else{ bitcount--; } } bitints[0] = ((unsigned int) bits[0] & (0x000000FF)); bitints[1] = ((unsigned int) bits[1] & (0x000000FF)); bitints[2] = ((unsigned int) bits[2] & (0x000000FF)); bitints[3] = ((unsigned int) bits[3] & (0x000000FF)); bitints[4] = ((unsigned int) bits[4] & (0x000000FF)); if(((bitints[0] + bitints[1] + bitints[2] + bitints[3]) & (0x000000FF)) == bitints[4]){ temp = bitints[2]; humidity = bitints[0]; return 1; }else{ return 0; } } int main(void) { g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 40000000); PinoutSet(false, false); ROM_GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_1); ConfigureUART(); UARTprintf("Its runing at : %d\n",g_ui32SysClock); while(1) { // // Turn on D1. LED 1 // LEDWrite(CLP_D1, 1); SysCtlDelay(g_ui32SysClock / 3); //%1s Delay its required because if the sensor is ready to fast the comunication goes down. LEDWrite(CLP_D1, 0); SysCtlDelay(g_ui32SysClock / 3); if(ReadDHT() == 0) { UARTprintf("Erro!\n"); } else { UARTprintf("Temp %d !\n",temp); UARTprintf("Hum %d !\n",humidity); } } }