当前位置: 首页 > news >正文

做网站交易装备可以么建设代刷网站

做网站交易装备可以么,建设代刷网站,外包服务平台,网站建设杭州滨江文章目录 前言一、下载u8g2源文件二、复制和更改文件2.1 复制文件2.2 修改文件u8g2_d_setup文件u8g2_d_memory 三、编写oled.c和oled.h文件3.1 CubeMX配置I2C3.2 编写文件oled.holed.c 四、测试代码main函数测试代码 总结 前言 在本文中#xff0c;我们将介绍如何在STM32上成… 文章目录 前言一、下载u8g2源文件二、复制和更改文件2.1 复制文件2.2 修改文件u8g2_d_setup文件u8g2_d_memory 三、编写oled.c和oled.h文件3.1 CubeMX配置I2C3.2 编写文件oled.holed.c 四、测试代码main函数测试代码 总结 前言 在本文中我们将介绍如何在STM32上成功地移植u8g2图形库以便能够轻松地控制OLED或LCD显示屏。u8g2库提供了一个灵活、功能强大的框架可以简化图形界面的开发过程。通过合理地配置STM32 CubeMX以及适当的硬件连接我们可以使得u8g2与STM32微控制器完美结合。 我们将逐步引导您完成整个移植过程从STM32 CubeMX的项目创建到u8g2库的集成和配置最终实现一个简单的示例程序以确保整个过程的顺利进行。让我们一起开始吧 一、下载u8g2源文件 u8g2下载地址 如果进不去可以私信我。找我要源代码。 下载好之后解压出来 二、复制和更改文件 2.1 复制文件 1、首先在工程下面创建一个u8g2文件夹 2、把我们下载好的u8g2文件夹里面的csrc下图中的这些文件复制进去 3、在工程中创建一个drive文件夹里面放oled文件夹oled文件夹放oled.c和oled.h之后有用 4、打开keil把前面的这些文件放进去 2.2 修改文件 u8g2_d_setup文件 我们需要找到下面这个函数 void u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) {uint8_t tile_buf_height;uint8_t *buf;u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb);buf u8g2_m_16_8_f(tile_buf_height);u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); }然后把其他函数给删除或者注释掉。 u8g2_d_memory 我们需要找到下面这个函数 uint8_t *u8g2_m_16_8_f(uint8_t *page_cnt) {#ifdef U8G2_USE_DYNAMIC_ALLOC*page_cnt 8;return 0;#elsestatic uint8_t buf[1024];*page_cnt 8;return buf;#endif }把其他函数删除或注释掉. 三、编写oled.c和oled.h文件 3.1 CubeMX配置I2C 首先我们在CubeMX配置好我们的I2C这个在之前的文章已经讲过了这里不多赘述。 3.2 编写文件 oled.h 我们在oled.h文件里面把下面的代码复制进去就可以了 #ifndef __oled_H #define __oled_H #ifdef __cplusplusextern C { #endif/* Includes ------------------------------------------------------------------*/ #include main.h #include u8g2.h /* USER CODE BEGIN Includes *//* USER CODE END Includes *//* USER CODE BEGIN Private defines *//* USER CODE END Private defines */ #define u8 unsigned char // ?unsigned char ???? #define MAX_LEN 128 // #define OLED_ADDRESS 0x78 // oled?????? #define OLED_CMD 0x00 // ??? #define OLED_DATA 0x40 // ???/* USER CODE BEGIN Prototypes */uint8_t u8x8_byte_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);void u8g2Init(u8g2_t *u8g2);#ifdef __cplusplus } #endif #endif /*__ i2c_H */ /* USER CODE END Prototypes */ oled.c 我们需要把MX_I2C1_Init这个函数复制进去这个函数是CubeMX生成的不需要我们自己写如果你的函数名和我的不同那就把u8x8_byte_hw_i2c里面的MX_I2C1_Init替换成你的函数 #include stm32f1xx_hal.h #include u8g2.h #include oled.h #include delay.h #include main.h #include oled.hI2C_HandleTypeDef hi2c1;static void MX_I2C1_Init(void) {/* USER CODE BEGIN I2C1_Init 0 *//* USER CODE END I2C1_Init 0 *//* USER CODE BEGIN I2C1_Init 1 *//* USER CODE END I2C1_Init 1 */hi2c1.Instance I2C1;hi2c1.Init.ClockSpeed 400000;hi2c1.Init.DutyCycle I2C_DUTYCYCLE_2;hi2c1.Init.OwnAddress1 0;hi2c1.Init.AddressingMode I2C_ADDRESSINGMODE_7BIT;hi2c1.Init.DualAddressMode I2C_DUALADDRESS_DISABLE;hi2c1.Init.OwnAddress2 0;hi2c1.Init.GeneralCallMode I2C_GENERALCALL_DISABLE;hi2c1.Init.NoStretchMode I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(hi2c1) ! HAL_OK){Error_Handler();}/* USER CODE BEGIN I2C1_Init 2 *//* USER CODE END I2C1_Init 2 */}uint8_t u8x8_byte_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {/* u8g2/u8x8 will never send more than 32 bytes between START_TRANSFER and END_TRANSFER */static uint8_t buffer[128];static uint8_t buf_idx;uint8_t *data;switch (msg){case U8X8_MSG_BYTE_INIT:{/* add your custom code to init i2c subsystem */MX_I2C1_Init(); //I2C???}break;case U8X8_MSG_BYTE_START_TRANSFER:{buf_idx 0;}break;case U8X8_MSG_BYTE_SEND:{data (uint8_t *)arg_ptr;while (arg_int 0){buffer[buf_idx] *data;data;arg_int--;}}break;case U8X8_MSG_BYTE_END_TRANSFER:{if (HAL_I2C_Master_Transmit(hi2c1, (OLED_ADDRESS), buffer, buf_idx, 1000) ! HAL_OK)return 0;}break;case U8X8_MSG_BYTE_SET_DC:break;default:return 0;}return 1; }void delay_us(uint32_t time) {uint32_t i 8 * time;while (i--); }uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {switch (msg){case U8X8_MSG_DELAY_100NANO: // delay arg_int * 100 nano seconds__NOP();break;case U8X8_MSG_DELAY_10MICRO: // delay arg_int * 10 micro secondsfor (uint16_t n 0; n 320; n){__NOP();}break;case U8X8_MSG_DELAY_MILLI: // delay arg_int * 1 milli secondHAL_Delay(1);break;case U8X8_MSG_DELAY_I2C: // arg_int is the I2C speed in 100KHz, e.g. 4 400 KHzdelay_us(5);break; // arg_int1: delay by 5us, arg_int 4: delay by 1.25uscase U8X8_MSG_GPIO_I2C_CLOCK: // arg_int0: Output low at I2C clock pinbreak; // arg_int1: Input dir with pullup high for I2C clock pincase U8X8_MSG_GPIO_I2C_DATA: // arg_int0: Output low at I2C data pinbreak; // arg_int1: Input dir with pullup high for I2C data pincase U8X8_MSG_GPIO_MENU_SELECT:u8x8_SetGPIOResult(u8x8, /* get menu select pin state */ 0);break;case U8X8_MSG_GPIO_MENU_NEXT:u8x8_SetGPIOResult(u8x8, /* get menu next pin state */ 0);break;case U8X8_MSG_GPIO_MENU_PREV:u8x8_SetGPIOResult(u8x8, /* get menu prev pin state */ 0);break;case U8X8_MSG_GPIO_MENU_HOME:u8x8_SetGPIOResult(u8x8, /* get menu home pin state */ 0);break;default:u8x8_SetGPIOResult(u8x8, 1); // default return valuebreak;}return 1; } void u8g2Init(u8g2_t *u8g2) {u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2, U8G2_R0, u8x8_byte_hw_i2c, u8x8_gpio_and_delay); // ??? u8g2 ???u8g2_InitDisplay(u8g2); // ??????????????,??????,?????????u8g2_SetPowerSave(u8g2, 0); // ?????u8g2_ClearBuffer(u8g2); } 四、测试代码 到这里已经大功告成了最后我们需要设置一下为C99标准 main函数测试代码 /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body******************************************************************************* attention** Copyright (c) 2023 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include main.h/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */#include u8g2.h #include oled.h/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD *//* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_I2C1_Init(void); /* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** brief The application entry point.* retval int*/ int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */u8g2_t u8g2; // a structure which will contain all the data for one displayu8g2Init(u8g2);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *///u8g2_DrawCircle(u8g2, 64, 32, 30, U8G2_DRAW_ALL);u8g2_SendBuffer(u8g2);u8g2_DrawBox(u8g2,0,0,20,20);u8g2_DrawBox(u8g2,20,20,20,20);u8g2_SendBuffer(u8g2);u8g2_DrawFrame(u8g2,10,40,20,20);u8g2_SendBuffer(u8g2);u8g2_SetFont(u8g2,u8g2_font_DigitalDiscoThin_tf);u8g2_DrawStr(u8g2,30,10,Hello World);u8g2_SendBuffer(u8g2);HAL_Delay(1000);/* USER CODE BEGIN 3 */}/* USER CODE END 3 */ }/*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_OscInitTypeDef RCC_OscInitStruct {0};RCC_ClkInitTypeDef RCC_ClkInitStruct {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL RCC_PLL_MUL9;if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_2) ! HAL_OK){Error_Handler();} }/*** brief I2C1 Initialization Function* param None* retval None*//*** brief GPIO Initialization Function* param None* retval None*/ static void MX_GPIO_Init(void) {/* GPIO Ports Clock Enable */__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** brief This function is executed in case of error occurrence.* retval None*/ void Error_Handler(void) {/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */ }#ifdef USE_FULL_ASSERT /*** brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* param file: pointer to the source file name* param line: assert_param error line source number* retval None*/ void assert_failed(uint8_t *file, uint32_t line) {/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf(Wrong parameters value: file %s on line %d\r\n, file, line) *//* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ 我们编译烧写即可看到oled已经显示了 总结 通过本文的介绍与实践我们成功地将u8g2图形库移植到了STM32微控制器上并实现了一个简单的示例程序。以下是我们在整个过程中所取得的关键成果 STM32 CubeMX项目创建我们从零开始使用了STM32 CubeMX创建了一个新的项目确保了正确的初始化和配置。 硬件连接通过正确地连接OLED或LCD显示屏到STM32微控制器我们保证了u8g2能够与硬件正确通信。 u8g2库的集成与配置我们成功地将u8g2库添加到了STM32 CubeMX项目中并配置了相关的参数以确保适应我们的硬件需求。 示例程序的编写我们编写了一个简单的示例程序以验证u8g2库的正确移植与配置。 通过这个实例我们展示了如何在STM32上成功地移植u8g2库为您在嵌入式图形界面开发中提供了一个强大的工具。希望本文对您在此方面的工作和项目中能够提供有价值的参考。祝您的项目取得圆满成功
http://www.hkea.cn/news/14513720/

相关文章:

  • 潍坊网站制作小程序济南网站优化收费标准
  • 网站建设低价建站室内设计培训多久
  • 龙元建设网站小榄做网站企业
  • 招聘网站如何做运营北京全网营销推广公司
  • 织梦商城网站做磁力链网站
  • 做家常菜的网站哪个好学软件工程好找工作吗
  • 网络热词2022流行语及解释关键词排名优化方案
  • 怎样建个自己的网站怎样给网站加外链
  • 长清网站建设大连企业网站建站模板
  • 温州中小企业网站建设苏州百度推广分公司电话
  • 创建站点的步骤广州微信开发
  • 手提包 东莞网站建设免费网站在哪下载
  • 网站建设系统开发感想与收获邢台吧贴吧
  • 房产网站建设推广百度关键词排名突然没了
  • 卡片式设计 网站wordpress手册 chm
  • 做网站便宜的公司wordpress备份content
  • 怎么建论坛网站闵行区实验小学
  • aspx 网站开发工具找大学生做网站
  • 国内个人网站安徽省工程信息网官网
  • 移动互联时代网站建设响应试企业网站
  • 企业型商务网站制作做法找网站开发项目
  • 郑州微网站河源网站优化
  • 一般建设网站需要多少预算重庆seo霸屏
  • 网站策划制作公司 北京建设旅游网站目标客户分析
  • 书店网站建设成都科技网站建设电话
  • 简单网站建设哪家便宜网站建设费用的财务核算
  • 青岛安装建设股份有限公司网站地推拉新app推广平台有哪些
  • 阿里云网站建设9元网站建设公司中
  • 天津城市网络建设苏州网站制作排名优化
  • 网站域名备案注册证书查询点卡平台网站开发