Блин, тут просто детская, школьная ошибка в адресной арифметике! Зачем рассказывать про то, что где-то такое работает?
void my_func(uint32_t *para, size_t para_num) {
uint8_t regval;
for(uint8_t i=0; i<para_num; i++) {
regval = *(uint8_t *)para;
Serial.print(regval, HEX);
Serial.println("\r");
para++;
}
В строке #7 Вы увеличиваете на 1 указатель на uint32_t
. На сколько но, по Вашему, численно увеличится? На 4! Вот Вы это и кушаете с маслом.
Сделайте правильно и “забудьте о перхоти”
void my_func(uint32_t *para, size_t para_num) {
const uint8_t * bPara = reinterpret_cast<const uint8_t *>(para);
// можно и как Вы делаете
// const uint8_t * bPara = (const uint8_t *) para;
// но так, как я написал - лучше
for(uint8_t i=0; i<para_num; i++) {
const uint8_t regval = bPara[i];
Serial.println(regval, HEX);
}
}