Top.Mail.Ru
Уведомления
Очистить все

[Решено] UART прерывание, по событию IDLE, не срабатывает.

Страница 2 / 2
 stm
(@stm)
Level 4

Выше в сообщении я неправильно посчитал.
7 регистров по 32 бит. 7*32==224==E0
0x4000 4800+E0==0x4000 48E0
Это хранится начиная с адреса 0x4000 48E0:

UART_InitTypeDef Init;
const uint8_t *pTxBuffPtr;
uint16_t TxXferSize;
__IO uint16_t TxXferCount;
uint8_t *pRxBuffPtr;
uint16_t RxXferSize;
__IO uint16_t RxXferCount;
__IO HAL_UART_RxTypeTypeDef ReceptionType;
DMA_HandleTypeDef *hdmatx;
DMA_HandleTypeDef *hdmarx;
HAL_LockTypeDef Lock;
__IO HAL_UART_StateTypeDef gState;
__IO HAL_UART_StateTypeDef RxState;
__IO uint32_t ErrorCode;

Это находится между адресами 0x4000 4800 - 0x4000 4BFF где вы пишете ничего не хранится.

ОтветитьЦитата
Создатель темы Размещено : 22.06.2023 10:55
 stm
(@stm)
Level 4

))Не судите строго))
224/8==28 Байт
Но сымсл не меняется

ОтветитьЦитата
Создатель темы Размещено : 22.06.2023 12:46
Aveal
(@aveal)
Top level Admin

@stm железок нет сейчас под рукой ) завтра скину и распишу, что где находится

ОтветитьЦитата
Размещено : 22.06.2023 16:32
 stm
(@stm)
Level 4

Я упростил код для лучшего понимания.
struct nr1
{
int CR1;
} Instance;

struct nr2
{
int BaudRate;
} Init;

struct nr3
{
int HAL_UART_STATE_RESET;
} ReceptionType;

struct common
{
struct nr1 Instance;
struct nr2 Init;
struct nr3 ReceptionType;

} UART_HandleTypeDef;
int main()
{
UART_HandleTypeDef.Instance.CR1=1;
UART_HandleTypeDef.Init.BaudRate=2;
UART_HandleTypeDef.ReceptionType.HAL_UART_STATE_RESET=3;
return 0;
}
Главное на что здесь надо обратить это структура UART_HandleTypeDef.
Информация из этой структуры будет храниться в памяти по порядку без разрывов.

UART_HandleTypeDef.Instance.CR1=1;
UART_HandleTypeDef.Init.BaudRate=2;
UART_HandleTypeDef.ReceptionType.HAL_UART_STATE_RESET=3;

tim2
ОтветитьЦитата
Создатель темы Размещено : 23.06.2023 13:57
 stm
(@stm)
Level 4

huart3.Init.BaudRate = 9600;
huart3 - начальный адрес Адрес USART3 0x4000 4800
BaudRate находится в структуре UART_HandleTypeDef и должен идти сразу после регистров.
Я смотрел в памяти, но этого не происходит.

tim2

 

ОтветитьЦитата
Создатель темы Размещено : 23.06.2023 15:13
Aveal
(@aveal)
Top level Admin

@stm Каша, все смешалось )

typedef struct __UART_HandleTypeDef
{
  USART_TypeDef                 *Instance;        /*!< UART registers base address        */

  UART_InitTypeDef              Init;             /*!< UART communication parameters      */

  uint8_t                       *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */

  uint16_t                      TxXferSize;       /*!< UART Tx Transfer size              */
// ........................

Instance - поле структуры = переменная (указатель на структуру USART_TypeDef), в которой хранится адрес 0x40004800 (UART registers base address), таким образом в дальнейшем происходит запись в регистры:

typedef struct
{
  __IO uint32_t SR;         /*!< USART Status register,                   Address offset: 0x00 */
  __IO uint32_t DR;         /*!< USART Data register,                     Address offset: 0x04 */
  __IO uint32_t BRR;        /*!< USART Baud rate register,                Address offset: 0x08 */
  __IO uint32_t CR1;        /*!< USART Control register 1,                Address offset: 0x0C */
  __IO uint32_t CR2;        /*!< USART Control register 2,                Address offset: 0x10 */
  __IO uint32_t CR3;        /*!< USART Control register 3,                Address offset: 0x14 */
  __IO uint32_t GTPR;       /*!< USART Guard time and prescaler register, Address offset: 0x18 */
} USART_TypeDef;

Экземпляр UART_HandleTypeDef, как и все ее поля, хранится в ОЗУ.

 

 

 

ОтветитьЦитата
Размещено : 23.06.2023 16:06
 stm
(@stm)
Level 4

Ок. Раробрался))

tim2
ОтветитьЦитата
Создатель темы Размещено : 23.06.2023 17:58
 stm
(@stm)
Level 4

USART_TypeDef, не UART_InitTypeDef

ОтветитьЦитата
Создатель темы Размещено : 23.06.2023 18:12
Aveal
(@aveal)
Top level Admin

@stm хорошо)

ОтветитьЦитата
Размещено : 23.06.2023 18:18
 stm
(@stm)
Level 4

То есть если бы адрес сохранялся в UART_HandleTypeDef структуру, то было бы так, как я описал))
Я что то напутал и думал что так оно и есть, что адрес в структуру UART_HandleTypeDef сохраняется.

ОтветитьЦитата
Создатель темы Размещено : 23.06.2023 18:22
Страница 2 / 2
Поделиться: