I recently had a similar problem where my truck's idle would never settle to the ~700 rpm range. It turned out to be my ECT sensor was constantly reading the trucks temp as too low; mostly around 150F even though the truck was warmed up.
I bought an Ultra gauge to read the temp directly from the ECU. In hindsight, somebody correct me if i'm wrong, I should have been able to pull the connection to the ECT after the truck is warmed up and the truck will go into a pseudo limp mode because it no longer can read the engine coolant temp. Once there the ECU adjusts the intake to where it should be with the engine at 200F. You'll get a CEL, however, if the sensor is the problem, i.e. reading the engine temp too low, the engine idle should return to normal. Does that make sense?
I got here after cleaning the IAC and TB, seafoaming through the tank and post TB vacuum line, changing spark plugs and air filter. All needed to be done...
Good Luck!