CH32V003 ja RCWL-0516

CH32V003 mikrokontroller ja RCWL-0156 radar sensor, mis on üks kõige primitiivsemaid.

Radar tuvastav liikumise. Roheline LED süttib. Jadaport prindib “+”, muul juhul “-” ja USR LED ei põle.

/*
 *Hardware connection:
 *  PD5 -- Rx
 *  PD6 -- Tx
 *    -- LED
 *
 */

#include "debug.h"


/* Global define */
#define RADAR_PORT GPIOD
#define RADAR_PIN  GPIO_Pin_4
#define RADAR_RCC  RCC_APB2Periph_GPIOD

#define LED_PORT   GPIOC
#define LED_PIN    GPIO_Pin_0
#define LED_RCC    RCC_APB2Periph_GPIOC

void radar_init(void)
{
    RCC_APB2PeriphClockCmd(RADAR_RCC, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin   = RADAR_PIN;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING; // RCWL drives the line, no pull needed
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(RADAR_PORT, &GPIO_InitStructure);
}

uint8_t radar_motion_detected(void)
{
    return GPIO_ReadInputDataBit(RADAR_PORT, RADAR_PIN) == Bit_SET;
}

void led_init(void)
{
    RCC_APB2PeriphClockCmd(LED_RCC, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin   = LED_PIN;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;  // Push-Pull output
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(LED_PORT, &GPIO_InitStructure);
}

void led_toggle(void)
{
    GPIO_WriteBit(LED_PORT, LED_PIN,
    GPIO_ReadOutputDataBit(LED_PORT, LED_PIN) ? Bit_RESET : Bit_SET);
}

/*********************************************************************
 * @fn      USARTx_CFG
 *
 * @brief   Initializes the USART2 & USART3 peripheral.
 *
 * @return  none
 */
void USARTx_CFG(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure = {0};
    USART_InitTypeDef USART_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1, ENABLE);

    /* USART1 TX-->D.5   RX-->D.6 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

    USART_Init(USART1, &USART_InitStructure);
    USART_Cmd(USART1, ENABLE);
}

/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    SystemCoreClockUpdate();
    Delay_Init();
#if (SDI_PRINT == SDI_PR_OPEN)
    SDI_Printf_Enable();
#else
    USART_Printf_Init(115200);
#endif
    //USARTx_CFG();
    radar_init();
    led_init();
    led_toggle();

    printf("SystemClk: %d\r\n", SystemCoreClock);
    printf("ChipID: %08x\r\n", DBGMCU_GetCHIPID());
   
    while(1)
    {
        if (radar_motion_detected())
        {
            GPIO_WriteBit(LED_PORT, LED_PIN, Bit_SET);   // LED on
            printf("+\r\n");
        }
        else
        {
            GPIO_WriteBit(LED_PORT, LED_PIN, Bit_RESET);  // LED off
            printf("-\r\n");
        }
        Delay_Ms(200); // poll every 50 ms, sensor output holds ~2s by default
    }
}

Kood on GitHubis: https://github.com/taunoe/ch32v003_RCWL-0516/

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.