user_config.c 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include "user_config.h"
  2. user_config_param_s user_config_param = USER_CONFIG_STAT_DEFAULT_CONFIG;
  3. /*******************************************************************************
  4. * @函数名称 set_user_config_param_init
  5. * @函数说明 解析注册指纹采集图像
  6. * @输入参数 param:参数
  7. * @输出参数 无
  8. * @返回参数 无
  9. *******************************************************************************/
  10. void set_user_config_param_init(user_config_param_s *param)
  11. {
  12. memset(param,0,sizeof(user_config_param_s));
  13. param->head = HEAD_VALUE;
  14. param->can_baud = CAN_BAUD_1000;
  15. }
  16. /*******************************************************************************
  17. * @函数名称 check_can_baud
  18. * @函数说明 检查CAN波特率
  19. * @输入参数 baud:波特率
  20. * @输出参数 无
  21. * @返回参数 无
  22. *******************************************************************************/
  23. bool check_can_baud(uint32_t baud)
  24. {
  25. switch(baud)
  26. {
  27. case CAN_BAUD_100:
  28. case CAN_BAUD_150:
  29. case CAN_BAUD_200:
  30. case CAN_BAUD_250:
  31. case CAN_BAUD_300:
  32. case CAN_BAUD_400:
  33. case CAN_BAUD_500:
  34. case CAN_BAUD_666:
  35. case CAN_BAUD_800:
  36. case CAN_BAUD_1000:return true;
  37. default:return false;
  38. }
  39. }
  40. /*******************************************************************************
  41. * @函数名称 FLASH_read
  42. * @函数说明 读取flash
  43. * @输入参数 addr:地址
  44. pData:数据指针
  45. len:数据长度
  46. * @输出参数 无
  47. * @返回参数 无
  48. *******************************************************************************/
  49. void FLASH_read(uint32_t addr, uint8_t *pData, uint32_t len)
  50. {
  51. uint32_t i;
  52. for(i=0;i<len;i++)
  53. {
  54. *pData++ = *(uint8_t*)addr++;
  55. }
  56. }
  57. /*******************************************************************************
  58. * @函数名称 check_read_config_param
  59. * @函数说明 比较读到的参数
  60. * @输入参数 param:参数
  61. * @输出参数 无
  62. * @返回参数 比较结果
  63. *******************************************************************************/
  64. static bool check_read_config_param(user_config_param_s *param)
  65. {
  66. if(param->head != HEAD_VALUE)
  67. {
  68. return false;
  69. }
  70. if(false == check_can_baud(param->can_baud))
  71. {
  72. return false;
  73. }
  74. return true;
  75. }
  76. /*******************************************************************************
  77. * @函数名称 User_Config_Read_Config
  78. * @函数说明 读取配置信息
  79. * @输入参数 无
  80. * @输出参数 无
  81. * @返回参数 无
  82. *******************************************************************************/
  83. void User_Config_Read_Config(void)
  84. {
  85. user_config_param_s param;
  86. /* Read the first block */
  87. FLASH_read(CONFIG_DATAFLASH_ADDR, (uint8_t *)&param, sizeof(user_config_param_s));
  88. if(true == check_read_config_param(&param))
  89. {
  90. PRINT("rd config succ!\n");
  91. memcpy(&user_config_param, &param, sizeof(user_config_param_s));
  92. PRINT("can baud=%d\n", user_config_param.can_baud);
  93. }
  94. else{
  95. PRINT("rd config error!\n");
  96. set_user_config_param_init(&user_config_param);
  97. User_Config_Write_Config();
  98. }
  99. }
  100. /*******************************************************************************
  101. * @函数名称 User_Config_Write_Config
  102. * @函数说明 写入配置信息
  103. * @输入参数 无
  104. * @输出参数 无
  105. * @返回参数 无
  106. *******************************************************************************/
  107. void User_Config_Write_Config(void)
  108. {
  109. uint8_t buf[256] = {0xFF};
  110. memset(buf, 0xFF, 256);
  111. memcpy(buf, (uint8_t *)&user_config_param, sizeof(user_config_param_s));
  112. FLASH_Unlock_Fast();
  113. /* Erase the first block */
  114. FLASH_ErasePage_Fast(CONFIG_DATAFLASH_ADDR);
  115. /* Programming DataFlash */
  116. FLASH_ProgramPage_Fast(CONFIG_DATAFLASH_ADDR, (uint32_t *)buf);
  117. FLASH_Lock_Fast();
  118. }
  119. /*******************************************************************************
  120. * @函数名称 user_config_save_can_baud
  121. * @函数说明 保存can波特率
  122. * @输入参数 无
  123. * @输出参数 无
  124. * @返回参数 无
  125. *******************************************************************************/
  126. bool user_config_save_can_baud(uint32_t baud)
  127. {
  128. if(false == check_can_baud(baud))
  129. {
  130. return false;
  131. }
  132. if(user_config_param.can_baud != baud)
  133. {
  134. user_config_param.can_baud = baud;
  135. User_Config_Write_Config();
  136. }
  137. return true;
  138. }
  139. /*******************************************************************************
  140. * @函数名称 user_config_init
  141. * @函数说明 初始化
  142. * @输入参数 无
  143. * @输出参数 无
  144. * @返回参数 无
  145. *******************************************************************************/
  146. void user_config_init(void)
  147. {
  148. User_Config_Read_Config();
  149. }