0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是CodeArts?

科技怪授 来源:科技怪授 作者:科技怪授 2022-12-09 15:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是CodeArts

软件开发生产线(CodeArts)原名“软件开发平台(DevCloud)”是集华为近30年研发实践、前沿研发理念、先进研发工具为一体的一站式云端DevOps平台,面向开发者提供的云服务,即开即用,随时随地在云端进行项目管理、代码托管、流水线、代码检查、编译构建、部署、测试、发布等,让开发者快速而又轻松地开启云端开发之旅。

支持云上开发

CodeArts提供基于Git的在线代码托管服务,支持代码管理、分支管理、CodeReview等功能,并增加多重安全防护功能,保证核心资产安全。

CodeArts推出云端开发环境CloudIDE,集成代码托管服务,支持全容器化开发环境的快速按需获取,支持40+语言在线编码,支持主流语言(Java、C/C++PythonNode.js等)的在线调试和运行。

image.png

实现DevOps持续交付

CodeArts提供可视化、可定制的自动交付流水线,将代码检查、编译构建、测试、部署等多种类型的任务纳入流水线,并纳管子流水线,实现任务的自动化并行或串行执行,并充分利用云上资源的弹性能力,大大缩短流水线的执行时间,实现云端可持续交付。

image.png

覆盖全生命周期

CodeArts覆盖软件交付的全生命周期,从需求下发、到代码提交与编译、验证、部署与运维,打通软件交付的完整路径,提供软件研发端到端支持,全面支撑落地DevOps。

image.png

为什么选择CodeArts?

CodeArts提供一站式云端DevOps平台,能够管理软件开发全过程,解决了需求变动频繁、开发测试环境复杂、多版本分支维护困难、无法有效监控进度和质量等研发痛点。

CodeArts实现了软件研发过程的可视、可控、可度量,让研发能力提升有章可循。

管理看板功能让公司软件研发能力可视化,有助于研发能力短板浮出水面;同时支持跨地域协作,客户可以参与开发,让反馈更快速、迭代更便利。

流水线功能能够可视化编排,提供一键式构建、部署;提交代码后可自动触发流水线,让软件上线提速一倍。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发平台
    +关注

    关注

    0

    文章

    104

    浏览量

    14934
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    俄罗斯数百辆保时捷突遭“锁死”断电,VTS系统的双刃剑

    电子发烧友网综合报道 自11月28日起,俄罗斯多个城市爆发了一场令车主措手不及的汽车“集体瘫痪”事件。数百辆保时捷在毫无预警的情况下突然锁死、断电,完全无法启动,导致车主被困路边。从莫斯科到圣彼得堡,从克拉斯诺达尔到其他主要城市,保时捷车主正经历着一场前所未有的“电子困境”。   俄罗斯最大汽车经销商罗尔夫公司(Rolf)证实,此次故障影响了2013年后生产的所有保时捷车型,无论发动机类型均未能幸免。故障车辆均搭载原厂
    的头像 发表于 12-08 07:57 887次阅读

    消费级eSIM需求上升,华为首发WATCH Ultimate 2引领行业创新

    电子发烧友原创 章鹰 2025年9月,苹果公司在全球推出仅支持eSIM的智能手机iPhone17 Air,并且将覆盖仅支持eSIM手机的国际和地区列表扩展到更多市场。10月,中国三大移动运营商在获得监管部门eSIM手机商用批复后,全面启动了国内智能手eSIM业务的商业服务试点,这些都有利于推动eSIM技术和产业链的发展。 11月25日,华为发布Mate80系列/X7及全场景新品发布会上,除了华为 Mate 80 RS 非凡大师手机支持两种实体卡和双eSIM外,华为还带来了两款支持eSIM的手表新品
    的头像 发表于 12-08 07:52 3631次阅读
    消费级eSIM需求上升,华为首发WATCH Ultimate 2引领行业创新

    紫光股份港交所IPO!年营收近800亿,抢占未来计算基础设施市场高地

    电子发烧友网综合报道,2025年12月3日,紫光股份有限公司(简称 “紫光股份”)向港交所递交招股书,拟在香港主板挂牌上市。紫光股份早在1999年11月4日在深交所上市,截至12月3日收市,总市值约人民币709.59亿元。   紫光股份是全球领先的数字化解决方案提供商,其解决方案包括ICT基础设施产品、软件及云服务,主要应用于人工智能训练与推理以及大数据处理等场景。公司提供全面的智能ICT基础设施产品,并辅以先进的云端智能平台。     中国计算
    的头像 发表于 12-08 07:50 770次阅读
    紫光股份港交所IPO!年营收近800亿,抢占未来计算基础设施市场高地

    2亿像素主摄卷土重来!豪威、索尼同步发布新品

    电子发烧友网综合报道  下半年,不少机型重新在主摄上用上2亿像素的传感器,包括vivo X300系列、荣耀500系列等,均采用了三星HPB 1/1.4英寸的2亿像素传感器。而最近,索尼、豪威相继推出全新的2亿像素传感器,这似乎预示着明年手机主摄的一个重要趋势。   索尼在11月底推出了LYTIA 901。LYTIA 901采用0.7μm像素间距,具备1/1.12英寸大底,实现约2亿的有效像素。通过像素结构和彩色滤光片的升级,有效提升饱和信号量,从而提升动态范围表现。   为充分发
    的头像 发表于 12-08 07:36 970次阅读

    DXP 2004

    我有DXP 2004安装包, 需要私信我。 只有网易136邮箱才能发! 每周6上线一次,OK。
    发表于 12-07 19:52

    【瑞萨RA6E2地奇星开发板试用】驱动 TEMT6000 环境光传感器

    【瑞萨RA6E2地奇星开发板试用】驱动 TEMT6000 环境光传感器 本文介绍了 RA6E2 地奇星开发板通过 ADC 读取 TEMT6000 传感器数据,实现串口打印环境光照强度的项目设计。 项目介绍 RA6E2 地奇星是一款基于100MHz Arm® Cortex®-M33 内核架构的核心板,主控芯片为 R7FA6E2BB3CNE; 项目包括 串口配置:使能 SCI9 异步串口通信功能,实现串口测试; ADC 配置:使能 AN000 通道 ADC 功能,并配置引脚、传感器、扫描频率、回调函数等; TEMT6000 驱动:通过计算获得环境光照强度数据并串口打印。 硬件连接 包括 JLINK 调试器、DHT11 模块、串口模块。 J-Link 调试器 RA6E2 J-Link Note SWCLK SCL Serial Clock SWDIO SDA Serial Data GND GND Ground 3V3 3V3 Power TEMT6000 模块 RA6E2 TEMT6000 Note P000 OUT Analog Output 3V3 VCC Power GND GND Ground 串口模块 (JLINK CDC) RA6E2 J-Link Note TXD (P109) RX Transmit RXD (P110) TX Receive GND GND Ground 实物图 动态展示见顶部视频。 串口配置 介绍了板载 USB 串口打印字符串的项目设计,以测试 UART 输出功能。 工程创建 打开 e^2^ studio 软件; 依次点击 文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA ; 依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择 R7FA6E2BB3CNE ,工具链选择 GNU ARM Embedded ,调试器选择 J-Link ; 完成工程创建 ; 进入 FSP 配置界面,打开 Pins 标签页,根据原理图或开发板丝印,将 P109 和 P110 引脚分别配置为 TXD9 和 RXD9 串口模式; 新建串口通信堆栈 New Stack - Connectivity - UART (r_sci_uart) ; 串口属性配置,中断和回调函数 user_uart_callback 设置; 进入 BSP 标签页,配置 RA Common 属性,配置内存空间 0x2000 ; 点击 Generate Project Content 按钮,生成工程代码。 详见:【瑞萨RA6E2】ADC 电压温度计 . ADC 配置 在完成前面关于 UART 串口创建的基础上,进一步实现 ADC 项目的添加。 进入 Stacks 标签页,新建 ADC 堆栈New Stack - Analog - ADC (r_adc) ; 属性配置 Input 选项下勾选 Channel 0 ; 中断配置 - Interrupts - Callback 值修改为 adc_callback - 优先级设置为 Priority 2 ; 引脚 Pins 开启 AN000 对应 P000 引脚; ADC 及串口配置完成后, 点击 Generate Project Content ,构建工程。 代码 修改 .../src/hal_entry.c 主程序,代码如下 #include \"hal_data.h\" fsp_err_t err = FSP_SUCCESS; volatile bool uart_send_complete_flag = false; void user_uart_callback (uart_callback_args_t * p_args) { if(p_args->event == UART_EVENT_TX_COMPLETE) { uart_send_complete_flag = true; } } /*------------- UART redirection printf -------------*/ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #endif PUTCHAR_PROTOTYPE { err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false; return ch; } int _write(int fd,char *pBuffer,int size) { for(int i=0;i<size;i++) { __io_putchar(*pBuffer++); } return size; } /*------------- ADC callback -------------*/ volatile bool scan_complete_flag = false; void adc_callback (adc_callback_args_t * p_args) { FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag = true; } void hal_entry(void) { /* TODO: add your own code here */ /* Open the transfer instance with initial configuration. */ err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); /* Initializes the module. */ err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); /* Handle any errors. This function should be defined by the user. */ assert(FSP_SUCCESS == err); /* Enable channels. */ err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert(FSP_SUCCESS == err); while(1) { uint16_t adc_data0=0; /* Enable scan triggering from ELC events. */ (void) R_ADC_ScanStart(&g_adc0_ctrl); scan_complete_flag = false; while (!scan_complete_flag) { /* Wait for callback to set flag. */ } err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data0); assert(FSP_SUCCESS == err); printf(\"P000(AN0)=%d\\\\\\\\n\",adc_data0); R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS); } } 保存代码,编译工程并调试。 效果 JLINK CDC UART 接收端连接开发板串口发送端 P109; 运行串口调试助手,配置端口号、波特率等参数; 打开串口,即可接收 ADC 原始值和 MCU 温度数据; TEMT6000 光感 TEMT6000 环境光(可见光)传感器,对可见光照度的反应特性与人眼的特性类似,可以模拟人对环境光线的强度的判断,从而方便做出与人友好互动的应用。 可应用于照明控制、屏幕背光控制等。 原理 通过 RA6E2 板载 ADC 功能读取 TEMT6000 模块模拟输出引脚的电压,获取环境光强度。 模块原理图 代码 while(1) { uint16_t adc_raw=0; int32_t temp_c = get_temperature_c(); float volt=0; /* Enable scan triggering from ELC events. */ (void) R_ADC_ScanStart(&g_adc0_ctrl); scan_complete_flag = false; while (!scan_complete_flag) { /* Wait for callback to set flag. */ } err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_raw); assert(FSP_SUCCESS == err); volt = (float)(adc_raw *3.3/4096); printf(\"P000(AN0) = %d, Temp: %ld ℃, Voltage: %.2f\\\\\\\\n\", adc_raw, temp_c, volt); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_HIGH); R_BSP_SoftwareDelay (50, BSP_DELAY_UNITS_MILLISECONDS); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_LOW); R_BSP_SoftwareDelay (950, BSP_DELAY_UNITS_MILLISECONDS); } 保存代码,编译工程并调试。 效果 运行串口调试助手,配置端口号、波特率等参数; 打开串口,即可接收 ADC 电压和 TEMT6000 光感数据; 动态效果见底部视频。 总结 本文介绍了 RA6E2 地奇星开发板通过 ADC 读取 TEMT6000 传感器数据,实现串口打印环境光照强度的项目设计,为相关产品的快速开发和应用设计提供了参考。
    发表于 12-07 17:32

    电能计量芯片遇到的问题

    在开发2路直流电能表过程中,计量专用芯片的第一路的电流V1P、V1N(差分输入1.5V,幅度0.2V)精度可以,但是第二路的电流V2P、V2N(差分输入1.5V,幅度0.2V)的精度很差,求解答,谢谢!另外有开发过直流电能表的高手也可以直接联系我委托开发。
    发表于 12-07 17:17

    深度解析DAC2900:高性能数模转换器的卓越之选

      在电子工程师的日常工作中,数模转换器(DAC)是实现数字信号到模拟信号转换的关键器件,广泛应用于波形合成、通信、医疗和测试仪器等众多领域。今天,我们就来深入探讨德州仪器(TI)推出的DAC2900这款高性能10位双声道高速数模转换器。 文件下载: dac2900.pdf 一、DAC2900的关键特性 DAC2900的特性使其在众多数模转换器中脱颖而出,为工程师们提供了出色的性能和设计灵活性。 高更新速率 :高达125MSPS的更新速率,能够满足高速信号处理的需求,适
    的头像 发表于 12-07 16:37 795次阅读
    深度解析DAC2900:高性能数模转换器的卓越之选

    【瑞萨RA6E2地奇星开发板试用】串口打印DHT11温湿度数据

    【瑞萨RA6E2地奇星开发板试用】串口打印DHT11温湿度数据 本文介绍了 RA6E2 地奇星开发板驱动 DHT11 传感器实现串口打印环境温湿度数据的项目设计。 项目介绍 RA6E2 地奇星是一款基于100MHz Arm® Cortex®-M33 内核架构的核心板,主控芯片为 R7FA6E2BB3CNE; 项目包括 串口配置:使能 SCI9 异步串口通信功能,实现串口测试; DHT11驱动:添加基于单总线协议的 DHT11 驱动代码,获取环境温湿度数据并串口打印。 硬件连接 包括 JLINK 调试器、DHT11 模块、串口模块。 J-Link 调试器 RA6E2 J-Link Note SWCLK SCL Serial Clock SWDIO SDA Serial Data GND GND Ground 3V3 3V3 Power DHT11 模块 RA6E2 DHT11 Note P407 Data Data line 3V3 VCC Power GND GND Ground 串口模块 (JLINK CDC) RA6E2 J-Link Note TXD (P109) RX Transmit RXD (P110) TX Receive GND GND Ground 详见顶部视频。 串口配置 介绍了板载 USB 串口打印字符串的项目设计,以测试 UART 输出功能。 工程创建 打开 e^2^ studio 软件; 依次点击 文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA ; 依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择 R7FA6E2BB3CFM ,工具链选择 GNU ARM Embedded ,调试器选择 J-Link ; 完成工程创建 ; 进入 FSP 配置界面,打开 Pins 标签页,根据原理图或开发板丝印,将 P109 和 P110 引脚分别配置为 TXD9 和 RXD9 串口模式; 新建串口通信堆栈 New Stack - Connectivity - UART (r_sci_uart) ; 串口属性配置,中断和回调函数 user_uart_callback 设置; 进入 BSP 标签页,配置 RA Common 属性,配置内存空间 0x2000 ; 点击 Generate Project Content 按钮,生成工程代码。 详见:【瑞萨RA6E2】ADC 电压温度计 . 工程代码 在左侧的项目目录中,打开 src/hal_entry.c 文件,添加如下关键代码 #include \"hal_data.h\" #include <stdio.h> fsp_err_t err = FSP_SUCCESS; volatile bool uart_send_complete_flag = false; void user_uart_callback (uart_callback_args_t * p_args) { if(p_args->event == UART_EVENT_TX_COMPLETE) { uart_send_complete_flag = true; } } /*------------- 串口重定向 -------------*/ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #endif PUTCHAR_PROTOTYPE { err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false; return ch; } int _write(int fd,char *pBuffer,int size) { for(int i=0;i<size;i++) { __io_putchar(*pBuffer++); } return size; } void hal_entry(void) { /* TODO: add your own code here */ err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); while(1){ printf(\"hello world!\\\\\\\\n\"); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_HIGH); R_BSP_SoftwareDelay (50, BSP_DELAY_UNITS_MILLISECONDS); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_LOW); R_BSP_SoftwareDelay (450, BSP_DELAY_UNITS_MILLISECONDS); } } 保存文件,右键项目 - 构建程序; 右键项目 - 调试项目 - 上传固件至开发板。 若报错,可右键项目进入属性界面,选择 C/C++ 构建 - 设置 - GNU Arm Cross C Linker - Miscellaneous,勾选 printf 、scanf 以及syscalls 选项。 测试效果 JLINK CDC UART 接收端连接开发板串口发送端 P109; 运行串口调试助手,配置端口号、波特率等参数; 打开串口,即可接收芯片发送的字符串; 每接收到一次消息,板载 LED 闪烁一次。 DHT11 驱动 在串口通信的基础上,使用单总线协议,驱动 DHT11 温湿度传感器,获取环境温湿度数据,并串口打印。 代码 dht11.h 新建 .../src/dht11.h 头文件,并添加如下代码 #ifndef DHT11_H_ #define DHT11_H_ #include \"hal_data.h\" #include <stdio.h> #ifndef delay_ms #define delay_ms(x)R_BSP_SoftwareDelay(x, BSP_DELAY_UNITS_MILLISECONDS) #endif #ifndef delay_1ms #define delay_1ms(x)R_BSP_SoftwareDelay(x, BSP_DELAY_UNITS_MILLISECONDS) #endif #ifndef delay_us #define delay_us(x)R_BSP_SoftwareDelay(x, BSP_DELAY_UNITS_MICROSECONDS) #endif #ifndef delay_1us #define delay_1us(x)R_BSP_SoftwareDelay(x, BSP_DELAY_UNITS_MICROSECONDS) #endif #ifndef u8 #define u8uint8_t #endif #ifndef u16 #define u16 uint16_t #endif #ifndef u32 #define u32 uint32_t #endif #define DHT11_DAT_GPIO_PIN BSP_IO_PORT_04_PIN_07// DHT11数据引脚 // 设置DHT11输出高或低电平 #define DATA_GPIO_OUT(x) R_IOPORT_PinWrite(&g_ioport_ctrl, DHT11_DAT_GPIO_PIN, x) // 获取DHT11数据引脚高低电平状态 static inline bsp_io_level_t DATA_GPIO_IN(void) { bsp_io_level_t p_pin_value; fsp_err_t err = R_IOPORT_PinRead(&g_ioport_ctrl, DHT11_DAT_GPIO_PIN, &p_pin_value); if(err != FSP_SUCCESS) { printf(\"DATA_GPIO_IN Failed!!\\\\\\\\r\\\\\\\\n\"); } return p_pin_value; } void DHT11_Init(void); uint8_t DHT11_Read_Data(float *temperature, float *humidity); #endif /* DHT11_H_ */ dht11.c 新建 .../src/dht11.c 源文件,并添加如下代码 #include \"dht11.h\" #define DHT11_DEBUG0 // 调试信息 1:开启 0:关闭 #define DHT11_TIMEOUT1000 // 超时阈值 /****************************************************************** * 函 数 名 称:DHT11_Init * 函 数 说 明:配置DHT11的初始化 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者:LC * 备 注:无 ******************************************************************/ void DHT11_Init(void) { //调用 R_IOPORT_Open 函数来初始化 IOPORT 模块 R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg); /* 设置DHT11数据引脚输出高电平 */ DATA_GPIO_OUT(1); delay_1ms(100); // 等待DHT11稳定 } /****************************************************************** * 函 数 名 称:DHT11_GPIO_Mode_OUT * 函 数 说 明:配置DHT11的数据引脚为输出模式 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者:LC * 备 注:无 ******************************************************************/ static void DHT11_GPIO_Mode_OUT(void) { // 在运行过程中配置DHT11数据引脚为输出模式 // 这里使用R_IOPORT_PinCfg函数配置引脚 fsp_err_t err = R_IOPORT_PinCfg(&g_ioport_ctrl, DHT11_DAT_GPIO_PIN, ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_HIGH)); if(err != FSP_SUCCESS) { printf(\"DHT11_GPIO_Mode_OUT Failed!!\\\\\\\\r\\\\\\\\n\"); } } /****************************************************************** * 函 数 名 称:DHT11_GPIO_Mode_IN * 函 数 说 明:配置DHT11的数据引脚为输入模式 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者:LC * 备 注:无 ******************************************************************/ static void DHT11_GPIO_Mode_IN(void) { // 在运行过程中配置DHT11数据引脚为输入模式 // 这里使用R_IOPORT_PinCfg函数配置引脚 fsp_err_t err = R_IOPORT_PinCfg(&g_ioport_ctrl, DHT11_DAT_GPIO_PIN, (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT); if(err != FSP_SUCCESS) { printf(\"DHT11_GPIO_Mode_IN Failed!!\\\\\\\\r\\\\\\\\n\"); } } /****************************************************************** * 函 数 名 称:DHT11_Start * 函 数 说 明:开始DHT11测量 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者:LC * 备 注:无 ******************************************************************/ void DHT11_Start(void) { DHT11_GPIO_Mode_OUT(); // 输出模式 DATA_GPIO_OUT(1); DATA_GPIO_OUT(0); delay_ms(25);// 保持18+ms低电平 DATA_GPIO_OUT(1); delay_us(25);// 主机释放总线 DHT11_GPIO_Mode_IN(); // 切换输入模式 } /****************************************************************** * 函 数 名 称:DHT11_CheckResponse * 函 数 说 明:检查DHT11从机的相应是否正确 * 函 数 形 参:无 * 函 数 返 回:1:正确 0:错误 * 作 者:LC * 备 注:无 ******************************************************************/ uint8_t DHT11_CheckResponse(void) { uint32_t timeout = 0; // 等待从机响应发送电平响应(低电平)(80µs) timeout = DHT11_TIMEOUT; while(DATA_GPIO_IN() && timeout--) { if(timeout == 0) { printf(\"DHT11_CheckResponse Failed[1]!!\\\\\\\\r\\\\\\\\n\"); return 0; // 失败 } } // 等待从机响应发送电平响应(高电平)(80µs) timeout = DHT11_TIMEOUT; while((!DATA_GPIO_IN()) && timeout--) { if(timeout == 0) { printf(\"DHT11_CheckResponse Failed[2]!!\\\\\\\\r\\\\\\\\n\"); return 0; // 失败 } } // 进入前导低电平 timeout = DHT11_TIMEOUT; while(DATA_GPIO_IN() && timeout--) { if(timeout == 0) { printf(\"DHT11_CheckResponse Failed[3]!!\\\\\\\\r\\\\\\\\n\"); return 0; // 失败 } } return 1; } /****************************************************************** * 函 数 名 称:DHT11_ReadBit * 函 数 说 明:读取一位数据位 * 函 数 形 参:无 * 函 数 返 回:0 或 1 * 作 者:LC * 备 注:无 ******************************************************************/ uint8_t DHT11_ReadBit(void) { uint8_t bit = 0; uint8_t timeCount = 0; uint32_t timeout; // 等待前导低电平过去 // 等待信号线由低变高 timeout = DHT11_TIMEOUT; while((!DATA_GPIO_IN()) && timeout--) { if(timeout == 0) { printf(\"DHT11_ReadBit Failed[1]!!\\\\\\\\r\\\\\\\\n\"); return 0; } } // 判断是0还是1? timeout = DHT11_TIMEOUT; while(DATA_GPIO_IN() && timeout--) { timeCount++; delay_us(1); // 等待1us if(timeout == 0) { printf(\"DHT11_ReadBit Failed[2]!!\\\\\\\\r\\\\\\\\n\"); return 0; // 失败 } } // 只要大于30us的高电平即可判断为数据1 if(timeCount >= 30) bit = 1; // 数据1 else bit = 0; // 数据0 return bit; } /****************************************************************** * 函 数 名 称:DHT11_Read_Data * 函 数 说 明:根据时序读取温湿度数据 * 函 数 形 参: * 函 数 返 回:0=数据校验失败其他=错误 * 作 者:LC * 备 注:无 ******************************************************************/ uint8_t DHT11_Read_Data(float *temperature, float *humidity) { int i; uint8_t data[5] = {0}; uint64_t val = 0; // 开始起始信号 DHT11_Start(); // 检查响应是否合规 if(0 == DHT11_CheckResponse()) { printf(\"DHT11_CheckResponse Failed!!\\\\\\\\r\\\\\\\\n\"); return 0; } // 数据读取核心(40-bit) for(i = 0; i < 40; i++) { val <<= 1; val |= DHT11_ReadBit(); } // 校验与数据提取 data[0] = (val >> 32) & 0xFF; // 湿度整数 data[1] = (val >> 24) & 0xFF; // 湿度小数 data[2] = (val >> 16) & 0xFF; // 温度整数 data[3] = (val >> 8)& 0xFF; // 温度小数 data[4] = val & 0xFF;// 校验和 #if DHT11_DEBUG printf(\"data[0] = %d\\\\\\\\r\\\\\\\\n\",data[0]); printf(\"data[1] = %d\\\\\\\\r\\\\\\\\n\",data[1]); printf(\"data[2] = %d\\\\\\\\r\\\\\\\\n\",data[2]); printf(\"data[3] = %d\\\\\\\\r\\\\\\\\n\",data[3]); printf(\"data[4] = %d\\\\\\\\r\\\\\\\\n\",data[4]); #endif // 校验计算:前4字节和 = 第5字节 if ((data[4] != (data[0] + data[1] + data[2] + data[3])) || (data[4] == 0)) { printf(\"CheckSum Failed!!!\\\\\\\\r\\\\\\\\n\"); return 0; // 校验失败 } // 保存温湿度 *humidity = data[0] + (data[1] * 0.1f);// 湿度(%) *temperature = data[2] + (data[3] * 0.1f);// 温度(℃) #if DHT11_DEBUG printf(\"T: %d\\\\\\\\r\\\\\\\\n\",(int)*temperature); printf(\"H: %d\\\\\\\\r\\\\\\\\n\",(int)*humidity); #endif return 1; } hal_entry.c 修改 .../src/hal_entry.c 主程序,代码如下 void hal_entry(void) { /* TODO: add your own code here */ err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); /* initialize DHT11 */ DHT11_Init(); /* 空读两次 */ DHT11_Read_Data(NULL, NULL); delay_1ms(1000); // 等待DHT11稳定 DHT11_Read_Data(NULL, NULL); delay_1ms(1000); // 等待DHT11稳定 printf(\"\\\\\\\\r\\\\\\\\n= = = = = = = = DHT11 Demo Start = = = = = = = = =\\\\\\\\r\\\\\\\\n\"); while(1){ float temperature = 0.0; float humidity = 0.0; if(DHT11_Read_Data(&temperature, &humidity)) { printf(\"Temperature = %.2f, Humidity = %.2f\\\\\\\\r\\\\\\\\n\", temperature, humidity); } else { printf(\"\\\\\\\\r\\\\\\\\nRead Error!!\\\\\\\\r\\\\\\\\n\"); } //printf(\"hello world!\\\\\\\\n\"); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_HIGH); R_BSP_SoftwareDelay (50, BSP_DELAY_UNITS_MILLISECONDS); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_LOW); R_BSP_SoftwareDelay (950, BSP_DELAY_UNITS_MILLISECONDS); } } 保存代码,编译工程并调试。 效果 JLINK CDC UART 接收端连接开发板串口发送端 P109; 运行串口调试助手,配置端口号、波特率等参数; 打开串口,即可接收温湿度数据; 每接收到一组数据,板载 LED 闪烁一次。 详见底部视频。 总结 本文介绍了瑞萨 RA6E2 地奇星开发板驱动 DHT11 传感器实现串口打印环境温湿度数据的项目设计,包括串口调试和配置、DHT11 驱动和串口输出等,为相关产品的快速开发和应用设计提供了参考。
    发表于 12-07 16:20

    德州仪器ADS1254:高精度24位ADC的全面解析

      在电子设计领域,高精度模拟 - 数字转换器(ADC)一直是许多测量和控制应用的核心组件。德州仪器(TI)的ADS1254就是这样一款备受关注的产品,它以其出色的性能和丰富的特性,在多个领域展现出强大的应用潜力。今天,我们就来深入剖析一下这款ADS1254 ADC。 文件下载: ads1254.pdf 一、ADS1254概述 ADS1254是一款具有24位分辨率的高精度、宽动态范围的Δ - Σ型ADC。它采用了Δ - Σ架构,确保了24位无丢失码的性能,在高达20kHz的数据速率下,有效分辨率可达
    的头像 发表于 12-07 16:16 774次阅读
    德州仪器ADS1254:高精度24位ADC的全面解析

    震撼发布!CodeArts 解锁全新技能,鸿蒙应用与元服务开发轻松拿捏

    随着物联网和智能设备的迅速发展,操作系统的多元化需求日益凸显。鸿蒙系统作为华为研发的面向全场景的分布式操作系统,旨在打破不同设备之间的生态壁垒,实现跨设备的无缝协同。 在鸿蒙系统初期,开发者主要依赖本地开发工具和传统的开发流程,面临着诸多挑战。一方面,本地算力有限,在处理复杂的编译任务和大型项目时,容易出现编译速度慢、资源消耗大等问题,严重影响开发效率。另一方面,在应用和元服务的构建、打包与批量发布过
    的头像 发表于 02-26 11:45 2933次阅读
    震撼发布!<b class='flag-5'>CodeArts</b> 解锁全新技能,鸿蒙应用与元服务开发轻松拿捏

    开源安全领航者!华为云 CodeArts Governance 构建更安全的软件开发生命周期

    华为云 CodeArts Governance开源治理服务是针对软件研发提供的一站式开源软件治理平台,从合法合规、网络安全、供应安全等维度消减开源软件使用风险。 最新特性源码成分分析专业版与二进制
    的头像 发表于 02-12 16:50 3035次阅读
    开源安全领航者!华为云 <b class='flag-5'>CodeArts</b> Governance 构建更安全的软件开发生命周期

    华为云软件开发生产线(CodeArts)1 月新功能特性

    华为云软件开发生产线 CodeArts 是一站式、全流程、安全可信的云原生 DevSecOps 平台,覆盖需求、开发、测试、部署、运维等软件交付全生命周期环节,为开发者打造全云化研发体验。 华为云
    的头像 发表于 02-11 19:52 3296次阅读

    华为云 Flexus X 实例评测使用体验——Anaconda 环境安装

    Anaconda 是 python 开发最常用环境,那么我们今天使用【华为云 Flexus X 实例】来搭建一下这个环境,希望本文能对 python 开发者们有一定的价值,当然,这里也推荐一下华为的【CodeArts】用着的确是挺方便的呢。
    的头像 发表于 01-21 16:13 687次阅读
    华为云 Flexus X 实例评测使用体验——Anaconda 环境安装

    华为云软件开发生产线(CodeArts)11 月新功能特性

    华为云软件开发生产线 CodeArts 是一站式、全流程、安全可信的云原生 DevSecOps 平台,覆盖需求、开发、测试、部署、运维等软件交付全生命周期环节,为开发者打造全云化研发体验。 华为云
    的头像 发表于 12-18 09:23 997次阅读