In general, it is perfectly fine to use the internal pull-up or pull-down resistors. Disadvantage is that you can forget to enable it from software, that can cause a little headache. The external pull-ups will always be there. So do not forget to enable the internal ones and save a lot of PCB area by reducing component number. The STM32's internal pull-up and pull-down resistors usually have a value between \$ 30\small~k\Omega \$ and \$ 50\small~k\Omega \$. [![enter image description here][1]][1] You should always check if your application needs a certain pull-up/down value before using the internal resistors. For example **do not use** them with **I<sup>2</sup>C**, as these values will be too high for that. [1]: https://i.sstatic.net/iSCFX.png