for(i=0;i<buffer_size;i++)
{
aTxbuffer[i]=0x1156+i;
}
这是我准备写进去的数据,但读出来的却是56,57,,,,丢失前面的11,这是哪里设置错了吗,程序如下,又打什么帮忙看下吧!!!!谢谢了
#include "stm32f4xx_hal.h"
UART_HandleTypeDef huart1;
#ifdef _GNUC_
#define PUTCHAR_PROTOTYPE int_io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
int8_t write_to_backup_sram( uint32_t *data, uint16_t bytes, uint16_t offset );
int8_t read_from_backup_sram( uint32_t *data, uint16_t bytes, uint16_t offset );
uint32_t aTxbuffer[20];
uint32_t aRxbuffer[20];
uint16_t i;
#define buffer_size 20
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
for(i=0;i<buffer_size;i++)
{
aTxbuffer[i]=0x1156+i;
}
write_to_backup_sram(aTxbuffer,20,0x0111);
read_from_backup_sram(aRxbuffer,20,0x0111);
for(i=0;i<buffer_size;i++)
{
printf("%08x
",aRxbuffer[i]);
}
}
/* 写操作
*/
int8_t write_to_backup_sram( uint32_t *data, uint16_t bytes, uint16_t offset )
{
const uint16_t backup_size = 0x1000;
uint8_t* base_addr = (uint8_t *) BKPSRAM_BASE;
uint16_t i;
if( bytes + offset >= backup_size )
{
/* ERROR : the last byte is outside the backup SRAM region */
return -1;
}
__HAL_RCC_BKPSRAM_CLK_ENABLE();
/* disable backup domain write protection */
__HAL_RCC_PWR_CLK_ENABLE() ; // set RCC->APB1ENR.pwren
HAL_PWR_EnableBkUpAccess(); // set PWR->CR.dbp = 1;
HAL_PWREx_EnableBkUpReg(); // Enables the Backup Regulator.
for( i = 0; i < bytes; i++ )
{
*(__IO uint32_t *)(base_addr + offset + i) = *(data+i);
}
return 0;
}
/* 读操作
*/
int8_t read_from_backup_sram( uint32_t *data, uint16_t bytes, uint16_t offset )
{
const uint16_t backup_size = 0x1000;
uint8_t* base_addr = (uint8_t *) BKPSRAM_BASE;
uint16_t i;
if( bytes + offset >= backup_size ) {
/* ERROR : the last byte is outside the backup SRAM region */
return -1;
}
__HAL_RCC_BKPSRAM_CLK_ENABLE();
for( i = 0; i < bytes; i++ ) {
*(data+i) = *(base_addr + offset + i);
}
return 0;
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/* USART1 init function */
static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
}
/** Pinout Configuration
*/
static void MX_GPIO_Init(void)
{
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>