Here is my basic understanding,
Flatness refers to the form of a feature, such as one edge of a cube. A .010" dimension on a flatness tolerance means the the edge should stay within two parallel planes .010" apart from each other along its entire surface.
Parallelism refers to the orientation of a feature with respect to another feature. A .010" dimension on a parallelism tolerance means that the edge with the tolerance should stay within two parallel planes .010" apart (These two parallel planes are exactly parallel to a datum surface). This dimensioned edge should use one or more basic dimensions showing its position with respect to one of the defined datums on the part. Think of the basic dimension as an exact value and the parallelism tolerance as the actual tolerance of that surface.
Anytime I have a feature with a geometric tolerance, I use basic dimensions to define its position with respect to a datum. A basic dimension is always precise and doesn't have any ± tolerances.
There may be a few exceptions to what I said, but this is how I learned it.
Find a website with some graphics and you will understand it better.