xiaolinen

  • 2024-08-22
  • 回复了主题帖: 【颁奖】全能小网关|CH32V208: BLE5.3+ USB2.0+ 10M Ethernet+ CAN + 4*UART

      已确认个人收件信息

  • 2024-08-08
  • 回复了主题帖: 离线地图怎么应用到单片机上呢?

    持续关注一下,自己也学习学习大佬们的奇技淫巧!

  • 2024-08-06
  • 加入了学习《CH582 AHT 温湿度计》,观看 CH582 AHT10 温湿度计

  • 2024-07-21
  • 回复了主题帖: 全能小网关|CH32V208--第五篇:ETH与BLE的联动

    lugl4313820 发表于 2024-7-21 09:07 蓝牙转wlan,确实是比较牛的功能了。 因为工作需要用到这个转换,也算是提前熟悉这部分功能了。

  • 2024-07-20
  • 发表了主题帖: 全能小网关|CH32V208--第五篇:ETH与BLE的联动

    本帖最后由 xiaolinen 于 2024-7-20 19:07 编辑 一:说明         (1)本次实验是在BLE_UART例程中,添加TCP客户端和SLEEP功能下进行的;         (2)ETH和BLE共存的情况下,将系统核心时钟设置为120MHz:                  既:uint32_t SystemCoreClock=SYSCLK_FREQ_120MHz_HSE;    二:设置SLEEP功能        2.1,sleep功能进入逻辑                 当蓝牙接收到“AT+SLEEP=1\r\n”时,进入低功耗模式;        2.2,sleep功能使能和低功耗模式下GPIO的状态设置函数 /********************************************************************* * @fn sleep_modem_gpio_state_func * * @brief sleep休眠模式时,GPIO的状态 * * @return none */ void sleep_modem_gpio_state_func(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //enable clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //enable clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //enable clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //enable clock GPIO_InitTypeDef GPIO_InitStructure = {0}; //gpio init struct GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //gpio pin GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //gpio mode GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //gpio speed GPIO_Init(GPIOA, &GPIO_InitStructure); //gpio init GPIO_Init(GPIOB, &GPIO_InitStructure); //gpio init GPIO_Init(GPIOC, &GPIO_InitStructure); //gpio init GPIO_Init(GPIOD, &GPIO_InitStructure); //gpio init } /********************************************************************* * @fn sleep_mode_enable * * @brief 使能sleep休眠模式 * * @return none */ void sleep_mode_enable(void) { if(((RCC->CFGR0 & RCC_SWS)==0x04)||((RCC->CFGR0 & RCC_PLLSRC) == RCC_PLLSRC)) { RCC_HSICmd(DISABLE); } __WFI(); }   三:添加TCP客户端功能         3.1,添加wchnet库文件                 3.1.1,工程中添加操作,如下图所示: 备注:步骤4为添加后的结果                 3.1.2,“包含”添加操作,如下图所示:                 3.1.3,“库”添加操作,如下图所示:                 3.1.4,“库路径”添加操作,如下图所示:                 3.1.5,TCP部分代码记录,如下所示: /********************************************************************* * @fn WCHNET_CreateTcpSocket * * @brief Create TCP Socket * * @return none */ static u8 socket_test; /********************************************************************* * @fn WCHNET_CreateTcpSocket * * @brief Create TCP Socket * * @return none */ void WCHNET_CreateTcpSocket(void) { u8 i; SOCK_INF TmpSocketInf; memset((void *) &TmpSocketInf, 0, sizeof(SOCK_INF)); memcpy((void *) TmpSocketInf.IPAddr, DESIP, 4); TmpSocketInf.DesPort = desport; TmpSocketInf.SourPort = srcport++; TmpSocketInf.ProtoType = PROTO_TYPE_TCP; TmpSocketInf.RecvBufLen = RECE_BUF_LEN; i = WCHNET_SocketCreat(&SocketId, &TmpSocketInf); printf("WCHNET_SocketCreat %d\r\n", SocketId); mStopIfError(i); i = WCHNET_SocketConnect(SocketId); //make a TCP connection mStopIfError(i); } /********************************************************************* * @fn WCH_TCP_CLIENT_SEND * * @brief TCP客户端发送数据 * * @param void * * @return none */ uint8_t wch_tcp_client_send_func(uint8_t *buf, uint32_t *len) { return WCHNET_SocketSend(socket_test, buf, len); } /********************************************************************* * @fn on_bleuartServiceEvt * * @brief ble uart service callback handler * * @return NULL */ extern void wch_tcp_client_send_func(uint8_t *buf, uint32_t *len); void on_bleuartServiceEvt(uint16_t connection_handle, ble_uart_evt_t *p_evt) { switch(p_evt->type) { case BLE_UART_EVT_TX_NOTI_DISABLED: PRINT("%02x:bleuart_EVT_TX_NOTI_DISABLED\r\n", connection_handle); break; case BLE_UART_EVT_TX_NOTI_ENABLED: PRINT("%02x:bleuart_EVT_TX_NOTI_ENABLED\r\n", connection_handle); break; case BLE_UART_EVT_BLE_DATA_RECIEVED://BLE数据接收事件 PRINT("BLE RX DATA len:%d\r\n", p_evt->data.length); PRINT("BLE RX DATA :%s\r\n", p_evt->data.p_data); //此处,将数据发送到TCP服务器端 if(wch_tcp_client_send_func((uint8_t *)p_evt->data.p_data,(uint32_t*)&p_evt->data.length) == p_evt->data.length) { printf("data sent successfully!\r\n"); } break; default: break; } }   四:实验现象         4.1,数据传输                 4.1.1,TCP服务器端记录,如下:                 4.1.2,设备运行日志记录,如下: /* 上电初始化 */ CH32V20x_BLE_LIB_V1.40 SystemClk:120000000 net version:19 WCHNET_LibInit Success WCHNET_SocketCreat 0 PHY Link Success /* BLE连接成功 */ Initialized.. AdvertisConn 1 - Int 18 Connected.. Update 1 - Int 6 Update 1 - Int 18 Update 1 - Int 10 /* TCP第一次连接超时 */ TCP Timeout WCHNET_SocketCreat 0 /* TCP第二次连接超时 */ TCP Timeout WCHNET_SocketCreat 0 /* TCP连接成功 */ PHY Link Success TCP Connect Success socket id: 0 /* 数据转发 */ BLE RX DATA len:19 BLE RX DATA :welcome to eeworld! data sent successfully! BLE RX DATA len:19 BLE RX DATA :welcome to eeworld! data sent successfully! BLE RX DATA len:19 BLE RX DATA :welcome to eeworld! data sent successfully! BLE RX DATA len:19 BLE RX DATA :welcome to eeworld! data sent successfully! BLE RX DATA len:19 BLE RX DATA :welcome to eeworld! data sent successfully! BLE RX DATA len:19 BLE RX DATA :welcome to eeworld! data sent successfully!           4.2,功耗记录  

  • 2024-07-07
  • 回复了主题帖: 全能小网关|CH32V208--第四篇:低功耗测试

    Jacktang 发表于 2024-7-7 09:24 主要是为了熟悉芯片各种低功耗模式的进入和退出方法,所记录的电流情况,并不是各个低功耗模式下的最低情况 ... 不要这么理解,不要这么理解,只是为后续进一步使用做一下铺垫

  • 2024-07-06
  • 发表了主题帖: 全能小网关|CH32V208--第四篇:低功耗测试

    本帖最后由 xiaolinen 于 2024-7-6 22:03 编辑 一:电路图修改         将下图中的D1(LED灯)和R1电阻拆除,减少电流的耗损。   二:低功耗模式         2.1,CH32V208的低功耗模式包括:睡眠模式,停止模式,待机模式,具体如下图所示:           2.1,active模式                 CH32V208在正常运行工作状态的电流情况,如下图所示:           2.3,sleep模式                 2.3.1,PA0引脚输入低电平触发外部中断EXTI_Line0退出sleep睡眠模式,程序在唤醒后继续执行。                 2.3.2,重点代码,如下图所示: /********************************************************************* * @fn EXTI0_INT_INIT * * @brief EXTI0中断配置,使PA0发生中断,唤醒sleep休眠 * * @return none */ void EXTI0_INT_INIT(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; EXTI_InitTypeDef EXTI_InitStructure = {0}; NVIC_InitTypeDef NVIC_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* GPIOA.0 ----> EXTI_Line0 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /********************************************************************* * @fn sleep_mode_enable * * @brief 使能sleep休眠模式 * * @return none */ void sleep_mode_enable(void) { __WFI(); }                 2.3.3,sleep模式下电流情况,如下图所示:           2.4,stop模式                 2.4.1,PA0引脚输入低电平触发外部中断EXTI_Line0退出stop睡眠模式,程序在唤醒后继续执行。                 2.4.2,重点代码,如下图所示: /********************************************************************* * @fn EXTI0_INT_INIT * * @brief EXTI0中断配置,使PA0发生中断,唤醒sleep休眠 * * @return none */ void EXTI0_INT_INIT(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; EXTI_InitTypeDef EXTI_InitStructure = {0}; NVIC_InitTypeDef NVIC_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* GPIOA.0 ----> EXTI_Line0 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /********************************************************************* * @fn stop_mode_enable * * @brief 使能stop休眠模式 * * @return none */ void stop_mode_enable(void) { PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); }                 2.4.3,stop模式下电流情况,如下图所示:           2.5,standby模式                 2.5.1,WKUP (PA0)引脚的上升沿退出待机模式,唤醒后程序复位。                 2.5.2,重点代码,如下图所示: /********************************************************************* * @fn gpio_init * * @brief GPIO初始化 * * @return none */ void gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; /* To reduce power consumption, unused GPIOs need to be set as pull-down inputs */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_Init(GPIOE, &GPIO_InitStructure); } /********************************************************************* * @fn PWR_WakeUpPinCmd * * @brief Enables or disables the WakeUp Pin functionality. * * @param NewState - new state of the WakeUp Pin functionality * (ENABLE or DISABLE). * * @return none */ void PWR_WakeUpPinCmd(FunctionalState NewState) { if(NewState) { PWR->CSR |= (1 << 8); } else { PWR->CSR &= ~(1 << 8); } } /********************************************************************* * @fn PWR_EnterSTANDBYMode * * @brief Enters STANDBY mode. * * @return none */ void PWR_EnterSTANDBYMode(void) { PWR->CTLR |= PWR_CTLR_CWUF; PWR->CTLR |= PWR_CTLR_PDDS; NVIC->SCTLR |= (1 << 2); __WFI(); }                 2.5.3,standby模式下电流情况,如下图所示:   三:声明         本次记录的实验,主要是为了熟悉芯片各种低功耗模式的进入和退出方法,所记录的电流情况,并不是各个低功耗模式下的最低情况。

  • 2024-07-03
  • 回复了主题帖: 全能小网关|CH32V208--第三篇:ETH使用

    lugl4313820 发表于 2024-7-3 06:55 他这个,是跑了OS吗?需要跑OS吗? 帖子里的实验过程没有跑OS的,但是这款芯片是可以跑OS的,具体怎么选择看自己的需求了。

  • 2024-07-02
  • 发表了主题帖: 全能小网关|CH32V208--第三篇:ETH使用

    本帖最后由 xiaolinen 于 2024-7-2 20:43 编辑 一:准备工作         PC端设置以太网IP和端口,如下图所示: 二:TCP 客户端测试使用         2.1,重点代码记录             2.1.1,创建TCP客户端 void WCHNET_CreateTcpSocket(void) { u8 i; SOCK_INF TmpSocketInf; memset((void *) &TmpSocketInf, 0, sizeof(SOCK_INF)); memcpy((void *) TmpSocketInf.IPAddr, DESIP, 4);//设置目的IP TmpSocketInf.DesPort = desport;//设置目的端口 TmpSocketInf.SourPort = srcport++;//设置源端口 TmpSocketInf.ProtoType = PROTO_TYPE_TCP;//设置协议类型 TmpSocketInf.RecvBufLen = RECE_BUF_LEN;//设置数据缓冲区长度 i = WCHNET_SocketCreat(&SocketId, &TmpSocketInf); printf("WCHNET_SocketCreat %d\r\n", SocketId); mStopIfError(i); i = WCHNET_SocketConnect(SocketId);//建立TCP连接 mStopIfError(i); }             2.1.2,套接字中断事件监控 void WCHNET_DataLoopback(u8 id) { u32 len, totallen; u8 *p = MyBuf, TransCnt = 255; len = WCHNET_SocketRecvLen(id, NULL);//query length printf("Receive Len = %d\r\n", len); totallen = len; WCHNET_SocketRecv(id, MyBuf, &len);//Read the data of the receive buffer into MyBuf printf("recv buf :\r\n%s\r\n",MyBuf); while(1){ len = totallen; WCHNET_SocketSend(id, p, &len);//Send the data totallen -= len;//Subtract the sent length from the total length p += len;//offset buffer pointer if( !--TransCnt ) break;//Timeout exit if(totallen) continue;//If the data is not sent, continue to send break;//After sending, exit } } void WCHNET_HandleSockInt(u8 socketid, u8 intstat) { u8 i; if (intstat & SINT_STAT_RECV)//receive data { printf("TCP Client Recv!\r\n"); WCHNET_DataLoopback(socketid);//Data loopback } if (intstat & SINT_STAT_CONNECT)//connect successfully { #if KEEPALIVE_ENABLE WCHNET_SocketSetKeepLive(socketid, ENABLE); #endif WCHNET_ModifyRecvBuf(socketid, (u32) SocketRecvBuf[socketid], RECE_BUF_LEN); for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) { if (socket[i] == 0xff) {//save connected socket id socket[i] = socketid; break; } } printf("TCP Connect Success\r\n"); printf("socket id: %d\r\n", socket[i]); } if (intstat & SINT_STAT_DISCONNECT)//disconnect { for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {//delete disconnected socket id if (socket[i] == socketid) { socket[i] = 0xff; break; } } printf("TCP Disconnect\r\n"); } if (intstat & SINT_STAT_TIM_OUT)//timeout disconnect { for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {//delete disconnected socket id if (socket[i] == socketid) { socket[i] = 0xff; break; } } printf("TCP Timeout\r\n"); WCHNET_CreateTcpSocket(); } }         2.2,实验现象:TCP客户端接收到服务器下发的数据,打印展示,并将数据原路返回至服务器,如下图所示: 三:UDP服务器测试使用         3.1,重点代码记录             3.1.1,创建UDP服务器 void WCHNET_CreateUdpSocket(void) { u8 i; SOCK_INF TmpSocketInf; memset((void *) &TmpSocketInf, 0, sizeof(SOCK_INF)); TmpSocketInf.SourPort = srcport;//设置源端口 TmpSocketInf.ProtoType = PROTO_TYPE_UDP;//设置协议类型 TmpSocketInf.RecvStartPoint = (u32) SocketRecvBuf;//设置数据缓冲区起始地址 TmpSocketInf.RecvBufLen = UDP_RECE_BUF_LEN;//设置数据缓冲区长度 TmpSocketInf.AppCallBack = WCHNET_UdpServerRecv;//绑定接受回调函数 i = WCHNET_SocketCreat(&SocketId, &TmpSocketInf); printf("WCHNET_SocketCreat %d\r\n", SocketId); mStopIfError(i); }             3.1.2,数据接收回调函数 void WCHNET_UdpServerRecv(struct _SOCK_INF *socinf, u32 ipaddr, u16 port, u8 *buf, u32 len) { u8 ip_addr[4], i; printf("Remote IP:"); for (i = 0; i < 4; i++) { ip_addr[i] = ipaddr & 0xff; printf("%d ", ip_addr[i]); ipaddr = ipaddr >> 8; } printf("srcport = %d len = %d socketid = %d\r\n", port, len, socinf->SockIndex); printf("buf:%s\r\n",buf); WCHNET_SocketUdpSendTo(socinf->SockIndex, buf, &len, ip_addr, port); }         3.2,实验现象:UDP服务器监听客户端,打印展示接收到的数据,并将数据原路返回至客户端,如下图所示:  

  • 2024-06-25
  • 回复了主题帖: 全能小网关|CH32V208--第二篇:BLE收发双向通讯

    Jacktang 发表于 2024-6-25 07:32 实验是在BLE_UART例程中进行,好吧 受教了

  • 2024-06-23
  • 发表了主题帖: 全能小网关|CH32V208--第二篇:BLE收发双向通讯

    本帖最后由 xiaolinen 于 2024-6-23 18:37 编辑 一:修改BLE名称         1.1,CH32V208的BLE名称,涉及到两个变量的修改:应将scanRspData的名称和attDeviceName的名称配置为一样,且scanRspData中的名称长度需要同步更新。         1.2,修改如下,所示: scanRspData变量修改部分   attDeviceName变量修改部分         1.3,实验现象,如下所示: 所显示蓝牙为过滤后的结果 二:BLE接受和发送例程         2.1,声明:本次实验在BLE_UART例程中进行。         2.2,实验思路:                 2.2.1,CH32V208通过BLE接收到数据,将数据转发到UART3中,进行显示。                 2.2.2,CH32V208通过UART3接收到数据,通过BLE通知到手机上蓝牙助手,进行显示。         2.3,重点部分代码,如下:                 2.3.1,BLE接受,转发至UART3,重点代码如下:                 2.3.2,UART3接受,转发至BLE,重点代码如下: 串口中断,将接收到的数据写入app_uart_rx_fifo中 主循环检测到UART_TO_BLE_SEND_EVT事件,从app_uart_rx_fifo中读取数据 数据通过ble_uart_notify发送出去         2.4,实验现象,如下所示: 通过蓝牙助手连接CH32V208的BLE进行数据接收和发送 通过串口助手连接CH32V208的UART3进行数据接收和发送    

  • 2024-06-06
  • 回复了主题帖: MicroPython动手做(32)——物联网之MQTT

    学习一下大佬的笔记,太牛了,尤其是动手做系列,干货满满

  • 2024-06-05
  • 回复了主题帖: [兆易GD32H759I-EVAL]学习以太网例程分享之LWIP

    牛,写的太详细了

  • 发表了主题帖: 全能小网关|CH32V208--第一篇:搭建环境,初步入手

    本帖最后由 xiaolinen 于 2024-6-5 17:27 编辑 一:说明         关于CH32V208的测试,均为自己的使用过程,因个人水平有限,有失误的地方,敬请指导。         本篇主要记录自己的开箱,以及环境安装好后的工具调试步骤。 二:烧录器部分         2.1,烧录器为WCH-LinkE,该烧录器既支持RISC-V内核的MCU烧录,又支持ARM内核的MCU烧录;                 模式更改操作如下:                 首先,打开MounRiver Studio软件->下载配置->目标模式;                 其次,点击查询->选择“WCH-LinkRV”->应用;                   备注:烧录器的更多使用方式,请移步:https://www.wch.cn/downloads/WCH-LinkUserManual_PDF.html下载。         2.2,两种模式的指示灯对比,如下(左图为烧录ARM内核MCU指示灯,右图为烧录RISC-V内核MCU指示灯):         2.3,接线方式:                 开发板 -> 烧录器                 CLK -> SWCLK                 DIO -> SWDIO                 GND -> GND                 VDD -> 3V3                 TXD -> RX                  RXD -> TX                    接线如图所示:                 如果已经通过PC的USB口连接了开发板, 就不要连WCHLink VCC, 如果连了WCHLink VCC, 就不要接USB口。 三:程序部分         3.1,功能说明:                 在rt-thread下,使一个LED灯连接到PA0引脚,观察引脚输出变化;并在主线程中周期打印。         3.2,主要程序展示: /********************************** (C) COPYRIGHT ******************************* * File Name : main.c * Author : WCH * Version : V1.0.0 * Date : 2021/06/06 * Description : Main program body. ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ #include "ch32v20x.h" #include <rtthread.h> #include <rthw.h> #include "drivers/pin.h" /* LED0 */ #define LED_PIN 10 //PA0 /* main is just one of the threads, in addition to tshell,idle * main is just an LED blinking, the main thread is registered in rtthread_startup, * tshell uses the serial port to receive interrupts, and the interrupt stack and thread stack are * used separately.Note that when entering an interrupt, the 16caller register needs to be pushed * into the thread stack */ int main(void) { SystemCoreClockUpdate(); while(1) { rt_kprintf("Welcome to eeworld!\r\n"); rt_thread_mdelay(1000); } } /* * @fn pro_led_blink_thread_entry * * @brief run thread * * @return none */ void pro_led_blink_thread_entry(void *param) { rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); while(1){ rt_pin_write(LED_PIN, PIN_LOW); rt_thread_mdelay(500); rt_pin_write(LED_PIN, PIN_HIGH); rt_thread_mdelay(500); } } /* * @fn pro_led_blink_func * * @brief create thread * * @return RT_EOK/RT_ERROR */ int pro_led_blink_func(void) { int ret = RT_ERROR; static rt_thread_t blink_thread = RT_NULL; // 动态创建线程 blink_thread = rt_thread_create("blink_thread",pro_led_blink_thread_entry,RT_NULL,1024,8,20); if(blink_thread != RT_NULL){ rt_thread_startup(blink_thread); ret = RT_EOK; }else{ rt_kprintf("create blink_thread failed!\r\n"); ret = RT_ERROR; } return ret; } INIT_APP_EXPORT(pro_led_blink_func);         3.3,实验现象如下:                 3.3.1,周期打印现象,如下:                 3.3.2,LED灯运行现象,如下: [localvideo]e7fe0501698ae20ad4a2b3cd6c44f493[/localvideo]

  • 2024-05-28
  • 加入了学习《STM32电机控制(硬石科技)》,观看 直流有刷电机(第1节)_电机概述&硬石电机实验箱

  • 2024-05-27
  • 回复了主题帖: 《python编程快速上手》第十篇:了解python的处理图像

    13620203064 发表于 2024-5-27 18:08 linux windows下的效果一样吗? 抱歉,我的开发环境只是Windows,没试linux环境下

  • 回复了主题帖: 《python编程快速上手》第十篇:了解python的处理图像

    hellokitty_bean 发表于 2024-5-27 14:04 恭喜恭喜,终于要到结束部分了。。。。。看来确实受益匪浅 关键是看帖子的我,也受益匪浅呢,感谢分享 ... 一起学习,共同进步

  • 回复了主题帖: 《python编程快速上手》第十篇:了解python的处理图像

    秦天qintian0303 发表于 2024-5-27 08:47 学习的目的就是要用,学以致用    没毛病

  • 2024-05-26
  • 回复了主题帖: 《python编程快速上手》第十篇:了解python的处理图像

    xinmeng_wit 发表于 2024-5-26 19:31 速度挺快的呀,都到最后了,图像处理了 先学习自己工作中可能用到的部分

  • 回复了主题帖: 《python编程快速上手》第十篇:了解python的处理图像

    秦天qintian0303 发表于 2024-5-26 20:57 这就基本上这个书已经学完了   是的,已经学到后半部分了,受益匪浅

最近访客

< 1/3 >

统计信息

已有69人来访过

  • 芯积分:1038
  • 好友:2
  • 主题:27
  • 回复:64

留言

你需要登录后才可以留言 登录 | 注册


辛昕 2024-2-28
额,我好友数量显示没法接了,有啥事直接回复我,或者 18898425015,手机微信同号
查看全部