完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
软件要求:fsp_v4.2.0、keil5
1.生成基本程序
选择是否使用实时系统,本次不使用
完后后,见下图
2.更改时钟源
3.配置串口
修改debug参数
返回配置串口
4.配置I2C
5.生成基础程序
6.连接模块与开发板
7.建立 inc 文件夹存放.h文件
keil5中建立hs3003.c、hs3003.h、uart.c、uart.h
.h文件存放在inc中,.c文件存放在src中
建立.h编译路径
.c添加进keil
hs3003.c
#include "hs3003.h"
#include "stdio.h"
/* See Developer Assistance in the project */
void g_comms_i2c_bus0_quick_setup(void);
void g_hs300x_sensor0_quick_setup(void);
void start_demo(void);
static void demo_err(void);
static volatile hs3003_callback_status_t hs3003_callback_status;
void g_comms_i2c_bus0_quick_setup(void)
{
fsp_err_t err;
err = R_SCI_I2C_Open(&hs3003_i2c_ctrl, &hs3003_i2c_cfg);
assert(FSP_SUCCESS == err);
}
void hs3003_i2c_callback(i2c_master_callback_args_t * p_args)
{
if (HS3003_CALLBACK_STATUS_SUCCESS == p_args->event)
{
hs3003_callback_status = HS3003_CALLBACK_STATUS_SUCCESS;
}
else
{
hs3003_callback_status = HS3003_CALLBACK_STATUS_REPEAT;
}
}
void start_hs3003(void)
{
fsp_err_t err;
uint8_t r_buf[4] = {0};
uint16_t humi, temp;
float tmp_f = 0.0;
uint8_t data[2] = {0x00,0x00};
demo_sequence_t sequence = DEMO_SEQUENCE_1;
g_comms_i2c_bus0_quick_setup();
while(1)
{
err = R_SCI_I2C_Write(&hs3003_i2c_ctrl,data,1,0);
R_BSP_SoftwareDelay(40000,BSP_DELAY_UNITS_MICROSECONDS);
err = R_SCI_I2C_Read(&hs3003_i2c_ctrl,&r_buf,4,1);
if(err == FSP_SUCCESS)
{
// printf("0x%X,0x%X,0x%X,0x%X\n", r_buf[0], r_buf[1], r_buf[2], r_buf[3]);
// printf("state:%x\n", r_buf[0] & RM_HS300X_MASK_STATUS_0XC0);
if ((r_buf[0] & RM_HS300X_MASK_STATUS_0XC0) != RM_HS300X_DATA_STATUS_VALID)
{
printf("ת»»Ê±¼ä²»¶ß");
}
humi = (r_buf[0] & RM_HS300X_MASK_HUMIDITY_UPPER_0X3F) << 8 | r_buf[1];
temp = (r_buf[2] << 8 | (r_buf[3] & RM_HS300X_MASK_TEMPERATURE_LOWER_0XFC)) >> 2;
tmp_f = (float)humi;
tmp_f = (tmp_f * RM_HS300X_CALC_HUMD_VALUE_100) / RM_HS300X_CALC_STATIC_VALUE;
printf("ʪ¶È: %.2f\n",tmp_f );
tmp_f = (float)temp;
tmp_f = ((tmp_f * RM_HS300X_CALC_TEMP_C_VALUE_165) / RM_HS300X_CALC_STATIC_VALUE) - RM_HS300X_CALC_TEMP_C_VALUE_40;
printf("ζÈ: %.2f\n", tmp_f);
}
else {
printf("¶ÁÈ¡´«¸ÐÆ÷³ö´í!\n");
}
R_BSP_SoftwareDelay(1000000,BSP_DELAY_UNITS_MICROSECONDS);
}
}
hs3003.h
#ifndef __HS3003_H
#define __HS3003_H
#include "hal_data.h"
/* Sequence */
typedef enum e_demo_sequence
{
DEMO_SEQUENCE_1 = (1),
DEMO_SEQUENCE_2,
DEMO_SEQUENCE_3,
DEMO_SEQUENCE_4,
DEMO_SEQUENCE_5,
DEMO_SEQUENCE_6,
} demo_sequence_t;
/* Callback status */
typedef enum e_hs3003_callback_status
{
HS3003_CALLBACK_STATUS_WAIT = (0),
HS3003_CALLBACK_STATUS_SUCCESS,
HS3003_CALLBACK_STATUS_REPEAT,
} hs3003_callback_status_t;
#define SENSOR_TEMP_RANGE_MAX (80)
#define SENSOR_TEMP_RANGE_MIN (-10)
#define SENSOR_HUMI_RANGE_MAX (100)
#define SENSOR_HUMI_RANGE_MIN (0)
/* Definitions of Mask Data for A/D data */
#define RM_HS300X_MASK_HUMIDITY_UPPER_0X3F (0x3F)
#define RM_HS300X_MASK_TEMPERATURE_LOWER_0XFC (0xFC)
#define RM_HS300X_MASK_STATUS_0XC0 (0xC0)
/* Definitions for Status Bits of A/D Data */
#define RM_HS300X_DATA_STATUS_VALID (0x00) // Status-bit: Valid data
/* Definitions for Calculation */
#define RM_HS300X_CALC_STATIC_VALUE (16383.0F)
#define RM_HS300X_CALC_HUMD_VALUE_100 (100.0F)
#define RM_HS300X_CALC_TEMP_C_VALUE_165 (165.0F)
#define RM_HS300X_CALC_TEMP_C_VALUE_40 (40.0F)
#define RM_HS300X_CALC_DECIMAL_VALUE_100 (100.0F)
#define HS300X_ADR 0x44 // look at datasheet
#define HS300X_TEMP_MULTY 0.010071415 // look at datasheet
#define HS300X_TEMP_MIN 40 // look at datasheet
#define HS300X_HUMD_MULTY 0.006163516 // look at datasheet
#define HS300X_MAX_ITERATION 100
#define HS300X_DELAY_MEASUREMENT 35 // typical on datasheet 16.90 ms, rounded up a little (35ms = 1 try)
#define HS300X_DELAY_ITERATION 1
#define HS300X_STALE_DATA 2
#define HS300X_OK 1
#define HS300X_ERROR_SENSOR_BUSY 0
#define HS300X_ERROR_COLLISION_I2C -1
void start_hs3003(void);
#endif
uart.c
#include "uart.h"
/* µ÷ÊÔ´®¿Ú UART4 ³õʼ»¯ */
void uart_init(void)
{
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_UART_Open (&g_uart0_ctrl, &g_uart0_cfg);
assert(FSP_SUCCESS == err);
}
/* ·¢ËÍÍê³É±êÖ¾ */
volatile bool uart_send_complete_flag = false;
/* ´®¿ÚÖжϻص÷ */
void g_uart0_callback (uart_callback_args_t * p_args)
{
switch (p_args->event)
{
case UART_EVENT_RX_CHAR:
{
/* °Ñ´®¿Ú½ÓÊÕµ½µÄÊý¾Ý·¢ËÍ»ØÈ¥ */
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&(p_args->data), 1);
break;
}
case UART_EVENT_TX_COMPLETE:
{
uart_send_complete_flag = true;
break;
}
default:
break;
}
}
/* ÖØ¶¨Ïò printf Êä³ö */
#if defined __GNUC__ && !defined __clang__
int _write(int fd, char *pBuffer, int size); //·ÀÖ¹±àÒ뾯¸æ
int _write(int fd, char *pBuffer, int size)
{
(void)fd;
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)pBuffer, (uint32_t)size);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return size;
}
#else
int fputc(int ch, FILE *f)
{
(void)f;
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return ch;
}
#endif
uart.h
#ifndef __BSP_UART_H__
#define __BSP_UART_H__
#include "hal_data.h"
#include "stdio.h"
void uart_init(void);
#endif
hal_entry.c
#include "hal_data.h"
#include "uart.h"
#include "hs3003.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
/* TODO: add your own code here */
uart_init();
start_hs3003();
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
/*******************************************************************************************************************//**
* This function is called at various points during the startup process. This implementation uses the event that is
* called right before main() to set up the pins.
*
* @param[in] event Where at in the start up process the code is currently at
**********************************************************************************************************************/
void R_BSP_WarmStart (bsp_warm_start_event_t event)
{
if (BSP_WARM_START_RESET == event)
{
#if BSP_FEATURE_FLASH_LP_VERSION != 0
/* Enable reading from data flash. */
R_FACI_LP->DFLCTL = 1U;
/* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and
* C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */
#endif
}
if (BSP_WARM_START_POST_C == event)
{
/* C runtime environment and system clocks are setup. */
/* Configure pins. */
R_IOPORT_Open(&g_ioport_ctrl, g_ioport.p_cfg);
}
}
#if BSP_TZ_SECURE_BUILD
BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ();
/* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */
BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ()
{
}
#endif
8.下载程序
设置下载地址
设置完成后下载程序
9.运行效果
只有小组成员才能发言,加入小组>>
1409个成员聚集在这个小组
加入小组【瑞萨RA2L1入门学习】+ MacOS安装e2studio
881 浏览 0 评论
735 浏览 0 评论
1452 浏览 0 评论
1152 浏览 0 评论
1629 浏览 0 评论
2055浏览 4评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】RA0E1-32PIN-V1.0开发板测试一下点灯
2742浏览 3评论
3295浏览 2评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】使用Jlink RTT完成printf打印功能
909浏览 2评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】配置开发环境和编写一个点灯程序
1686浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-4-12 05:54 , Processed in 0.359248 second(s), Total 36, Slave 29 queries .
Powered by 电子发烧友网
© 2015 www.ringvoyeur.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191