The Dividend Discount Model is based on the concept that the present value of a stock is the sum of all future dividends, discounted back to the present. Since you said:
dividends are expected to grow at a constant rate in perpetuity
... the Gordon Growth Model is a simple variant of the DDM, tailored for a firm in "steady state" mode, with dividends growing at a rate that can be sustained forever.
Present Stock Value = DPS / (r - g)
Consider McCormick (MKC), who's last dividend was 31 cents, or $1.24 annualized. The dividend has been growing just a little over 7% annually. Let's use a discount, or hurdle rate of 10%.
1.24 / (.10 - .073) = $45.93
MKC closed today at $50.32, for what it's worth.
The model is extremely sensitive to inputs. As g approaches r, the stock price rises to infinity. If g > r, stock goes negative. Be conservative with 'g' -- it must be sustainable forever.
The next step up in complexity is the two-stage DDM, where the company is expected to grow at a higher, unsustainable rate in the early years (stage 1), and then settling down to the terminal rate for stage 2. Stage 1 is the present value of dividends during the high growth period. Stage 2 is the Gordon Model, starting at the end of stage 1, and discounting back to the present.
Consider Abbott Labs (ABT). The current annual dividend is $1.92, the current dividend growth rate is 12%, and let's say that continues for ten years (n), after which point the growth rate is 5% in perpetuity. Again, the discount rate is 10%.
Stage 1 is calculated as follows:
( DPS * (1+g) * [1 - ( (1+g)^n / (1+r)^n )] ) / (r - g)
( 1.92 * 1.12 * [1 - ( 3.1058 / 2.5937 )] ) / (.10 - .12)
( 1.92 * 1.12 * -0.1974 ) / -0.02 = 21.22
Stage 2 is GGM, using not today's dividend, but the 11th year's dividend, since stage 1 covered the first ten years. 'gn' is the terminal growth, 5% in our case.
DPS_11 = DPS * ((1+g)^(n+1)) = 6.68
DPS_11 / ( (r - gn) * (1 + r) ^(n+1) )
6.68 / ( .10 - .05) * (1 + .10)^11 ) = 51.50
The value of the stock today is 21.22 + 51.50 = 72.72
ABT closed today at $56.72, for what it's worth.