How to Calculate Gaussian Kernel for a Small Support Size?
Gaussian Kernel is made by using the Normal Distribution for weighing the surrounding pixel in the process of Convolution.

Since we're dealing with discrete signals and we are limited to finite length of the Gaussian Kernel usually it is created by discretization of the Normal Distribution and truncation.

I created a project in GitHub - Fast Gaussian Blur.
It uses many methods to approximate the Gaussian Blur Filter and evaluate their speed and quality.

The most classic method as I described above is the FIR Truncated Filter:

https://github.com/RoyiAvital/FastGuassianBlur/blob/master/ApplyGaussianBlur.m

Regarding small sizes, well a thumb rule is that the radius of the kernel will be at least 3 times the STD of Kernel.
If you chose $ 3 \times 3 $ kernel it means the radius is $ 1 $ which means it makes sense for STD of $ \frac{1}{3} $ and below.

Then just fill your Kernel By:

gaussianBlurRadius  = ceil(stdToRadiusFactor * gaussianKernelStd);     
vGaussianKernel = exp(-([-gaussianBlurRadius:gaussianBlurRadius] .^ 2) / (2 * gaussianKernelStd * gaussianKernelStd));
vGaussianKernel = vGaussianKernel / sum(vGaussianKernel);