Как вытащить массив, вложенный в структуру?

Блин, тут просто детская, школьная ошибка в адресной арифметике! Зачем рассказывать про то, что где-то такое работает?

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);
  }
}
2 лайка