ddllxxrr

个性签名:http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

  • 2021-01-22
  • 发表了主题帖: 【RISC-V MCU CH32V103测评】开箱并跑起

    开箱先: 给我的印象是快递把那块大板子给搞丢了。可是我翻了我的包装没有任何洞洞。难道就这。。。。。。给我的印象太小了。   更不可思议的是那个WHC LINK,居然小的让我很难相信这么一个小东东,能当LINK大印么????   按照说明先装了开发环境,然后新建工程。芯片选择CH32V103C8T6。   我把WCHLINK插到电脑上,电脑突然跳出正在安装驱动。。。。。。过了一会儿居然安装成功。 工程建完后,就有一个模板,编译这个模板居然提示没有错误,我点了开发环境FLASH里边的down load居然下载也通过了。   我又把WCH LINK 的RX TX用杜邦线接到板子上。按复位键,居然打出了模板程序的字符串。 给我的第一印象,板子小但是好用。好了,写到这了,睡觉去了。  

  • 2021-01-19
  • 回复了主题帖: 测评入围名单:沁恒RISC-V架构32位通用MCU CH32V103有奖评测

    信息确认无误,谢谢沁恒及管理

  • 2021-01-16
  • 回复了主题帖: 搞事情预警~~~~啦啦啦~快进帖前排了解

    FZ5边缘AI计算盒子

  • 2021-01-12
  • 回复了主题帖: 问下关于双向可控硅的选型

    sky999 发表于 2021-1-11 23:26 可控硅的电流越大,会不会漏电流越大哦?
    不会吧,门限都是一样地

  • 2021-01-11
  • 回复了主题帖: 问下关于双向可控硅的选型

    这自然有区别6A只能带小于6A的电流大了,就不行了,而16A的最大带16A电流,价钱也贵。楼主的都不够我用,我前些日子考虑40A的

  • 2021-01-03
  • 发表了主题帖: 【NUCLEO-L452RE测评】+FREERTOS(CMSIS-RTOS)事件

    本帖最后由 ddllxxrr 于 2021-1-3 10:43 编辑 到今天为止,我觉得FREERTOS就是CMSIS-RTOS只不过看其封装了哪个操作系统,除了FREERTOS外我现在见到的,还可封装MDK自带的Keil RTX。但我只用CMSIS-RTOS就得了。 毕竟要站在巨人的肩膀上。 我今天看了下事件。我觉得MDK把事件说得很清楚,每个任务只要建立了就有16个事件位。也不需要建立什么事件标识。   但事件,英语翻译过去应为EVENT,可是CMSIS-RTOS确定义为signal这个旗标的那个信号Semaphone,而STM32CUBE里边也没有处理好。只是一个框架子。   根本定义不了什么,我这个人比较懒,能不动手写就不动手写,但这个事件没有定义,只有自己写了: 接上个程序: 1,定义一个线程,在这个线程里向默认任务发事件。 2,默认任务收到后,打印出数量,就这些。   /* USER CODE END Header_StartTask02 */ void StartTask02(void const * argument) { /* USER CODE BEGIN StartTask02 */ /* Infinite loop */ for(;;) { osDelay(1000); osSignalSet(defaultTaskHandle,0x01); } /* USER CODE END StartTask02 */ }   /* USER CODE END Header_StartDefaultTask */ void StartDefaultTask(void const * argument) { /* USER CODE BEGIN 5 */ uint32_t count; /* Infinite loop */ for(;;) { osSignalWait(0x01,osWaitForever); { count++; osDelay(1); LCD_ShowNum(10,80,count,5); } } /* USER CODE END 5 */ }     运得结果是每隔一分钟就显示一个加1值。 写了这么多,FREERTOS(CMSIS-RTOS)我觉得就够用了。至于怎么用,那就是经验和失败的叠加。也许下次还有个互斥量要做一下。 我觉得那个玩意在工作中没多大用,互斥只是解决优先级反转。我反正用不上。

  • 2020-12-28
  • 回复了主题帖: 开关电源兴趣小组 第18次任务

    本文图(03)中红色箭头1所指处是功率开关管导通阶段。反激变换器功率开关管导通时也会在变压器初级和初级的分布电容两端产生电压突变,见本文图(05)中绕组Np和Cp。为什么图(03)中红色箭头1处没有衰减振荡波形?本文图(04)中对应于功率开关管导通阶段(T1之前阶段)也看不到衰减振荡波形。   答:因为变压器的初级正处于充电阶段,还没有行成震荡。

  • 回复了主题帖: 精通Verilog HDL:IC设计核心技术实例详解.

    谢谢分享

  • 回复了主题帖: 以科技之力,成就安全 PI与您一起驾驭明天的智慧 答题赢好礼!活动颁奖啦~

    本帖最后由 ddllxxrr 于 2020-12-28 20:30 编辑 谢谢POWER 和EEWORLD及管理

  • 2020-12-27
  • 发表了主题帖: 【NUCLEO-L452RE测评】+管脚驱动1.3寸OLED并用任务显示次数

    每当我想搞个屏显示的时候我就会找一个管脚少且容易驱动的屏,本来想用真的SPI驱动。但没有管脚来得快。 我想分两步走吧,以后再搞硬件的。。。。。。也不知何时,反正,大约在冬季。 先说说我的屏吧。 SPI的规格书传一下: 怎么加不进来应在附件里边吧。 然后就加上要用的几个管脚:我用的是PA11、PA12、 PB11、PB12,电源和地不算,只要插上就行 然后,反整个OLED文件作为一个OLED子目录的东东,考到本程序根目录下 在oled.h文件中,改管脚的定义,初始化在STM32CUBEMX中自动完成 //-----------------OLED端口定义---------------- #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_12)//CLK #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_12) #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_13)//DIN #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_13) #define OLED_RST_Clr() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_14)//RES #define OLED_RST_Set() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_14) #define OLED_DC_Clr() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_15)//DC #define OLED_DC_Set() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_15) 然后在主函数中包含这个头文件,在初始化时一定要注意,就是各管脚初始化完了后,一下要接高。这个让我费了半天的时间。 //OLED_CS_Clr(); //打开片选使能 OLED_SCLK_Set() OLED_SDIN_Set() OLED_RST_Set(); HAL_Delay(1); OLED_RST_Clr(); HAL_Delay(20); OLED_RST_Set(); HAL_Delay(20); //OLED_BLK_Set(); //************* Start Initial Sequence **********// LCD_WR_REG(0x36); LCD_WR_DATA8(0x00); LCD_WR_REG(0x3A); LCD_WR_DATA8(0x05); LCD_WR_REG(0xB2); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x33); LCD_WR_DATA8(0x33); LCD_WR_REG(0xB7); LCD_WR_DATA8(0x35); LCD_WR_REG(0xBB); LCD_WR_DATA8(0x19); LCD_WR_REG(0xC0); LCD_WR_DATA8(0x2C); LCD_WR_REG(0xC2); LCD_WR_DATA8(0x01); LCD_WR_REG(0xC3); LCD_WR_DATA8(0x12); LCD_WR_REG(0xC4); LCD_WR_DATA8(0x20); LCD_WR_REG(0xC6); LCD_WR_DATA8(0x0F); LCD_WR_REG(0xD0); LCD_WR_DATA8(0xA4); LCD_WR_DATA8(0xA1); LCD_WR_REG(0xE0); LCD_WR_DATA8(0xD0); LCD_WR_DATA8(0x04); LCD_WR_DATA8(0x0D); LCD_WR_DATA8(0x11); LCD_WR_DATA8(0x13); LCD_WR_DATA8(0x2B); LCD_WR_DATA8(0x3F); LCD_WR_DATA8(0x54); LCD_WR_DATA8(0x4C); LCD_WR_DATA8(0x18); LCD_WR_DATA8(0x0D); LCD_WR_DATA8(0x0B); LCD_WR_DATA8(0x1F); LCD_WR_DATA8(0x23); LCD_WR_REG(0xE1); LCD_WR_DATA8(0xD0); LCD_WR_DATA8(0x04); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x11); LCD_WR_DATA8(0x13); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x3F); LCD_WR_DATA8(0x44); LCD_WR_DATA8(0x51); LCD_WR_DATA8(0x2F); LCD_WR_DATA8(0x1F); LCD_WR_DATA8(0x1F); LCD_WR_DATA8(0x20); LCD_WR_DATA8(0x23); LCD_WR_REG(0x21); LCD_WR_REG(0x11); //Delay (120); LCD_WR_REG(0x29); 开始,没有给个管脚的初始值置位,这样就驱动不起来。我搞了半天也没有搞明白,我从管脚定义都改了,把时钟也改成除4后的时钟还是不行。 最后加了个初始值搞定了。 在默认任务里加个变量,然后显示。没有什么意义,就是显示。 再有STM32CUBEMX 有一点不好,一复位以前定义的就没有了。 现在我想要以前的任务还得对照以前的贴子,慢慢建立。 以下是照片:   怎么说呢,以后的贴子就用显示部的的FREERTOS了。这次OLED打包传了,省得下次找不到。

  • 2020-12-25
  • 回复了主题帖: 颁奖:富士通白皮书下载活动

    谢谢EEworld、富士通、及管理

  • 发表了主题帖: 【NUCLEO-L452RE测评】+串口收到的数值给消息队例

    接着上一程序,上一程序是这样,有两个任务一个发消息给消息队列,一个收消息队列并打印,同时串口接收中断。 那么这次我想再增加个消息队列,再增加个任务收串口来的消息,串口收到8个数据后传给消息队列。   由于CMSIS_RTOS是对FREERTOS的封装,其有些函数都变了。优其消息队列的处理我觉得就很不一样。但我觉得CMSIS_RTOS简单,将来有钱途。所以就仍然用CMSIS_RTOS. 至于两者有何区别请看下边的文章:   至于这次为什么增加一个队列,一个任务,我这么想地,操作系统之所以用它是给我解决问题地,那么我现在就是要三个任务一个中断,两个消息队列地跑。跑不起就说明不是个好系统。   在串口中断完成回调函数里加入如下语句: /* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t i; HAL_UART_Transmit(&huart2, uart2_rxbuf, 1, 100); // 把收到的字节原样发送出去 for(i=0;i<8;i++) { osMessagePut(myQueue02Handle,uart2_rxbuf,osWaitForever); } HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 1); // 重新注册一次,要不然下次收不到了 } 在新增任务里加入如下语句: void StartTask04(void const * argument) { /* USER CODE BEGIN StartTask04 */ osEvent evt; uint8_t queue_buffer[10]; uint8_t queue_count; /* Infinite loop */ for(;;) { evt = osMessageGet(myQueue02Handle,osWaitForever); if(queue_count < 8) { queue_buffer[queue_count] = evt.value.v; ++queue_count; if(queue_count == 8) { printf("the message is trainslate..."); } } osDelay(1); } /* USER CODE END StartTask04 */ }     断点打到printf那一行的前面。运行检查发送和接收的,正确! 我发的就是这个:01 03 00 01 00 02 00 11  

  • 2020-12-22
  • 回复了主题帖: 开源一个图形化积木编程控制器的板子pcb和上位机源码

    怎么象PLC  

  • 2020-12-21
  • 发表了主题帖: 【NUCLEO-L452RE测评】+串口中断接收

    还是接着上一个实例来。因为我想找到FREERTOS实战中的真谛。 上一个STM32CUBEMX的工程也再,我点开就是了。 把USART2的串口中断打开: 然后点生成代码,直接用MDK打开生成的工程。 发现STM32L4xx_it.c中多了: /** * @brief This function handles USART2 global interrupt. */ void USART2_IRQHandler(void) { /* USER CODE BEGIN USART2_IRQn 0 */ /* USER CODE END USART2_IRQn 0 */ HAL_UART_IRQHandler(&huart2); /* USER CODE BEGIN USART2_IRQn 1 */ /* USER CODE END USART2_IRQn 1 */ } 我没有管而是去查了一下资料,因为HAL向来强调中断时间得短,搞个带__WEAK的回调函数来处理。 于是我就是主程序里加上这个回调函数: /* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { HAL_UART_Transmit(&huart2, uart2_rxbuf, 1, 100); // 把收到的字节原样发送出去 HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 1); // 重新注册一次,要不然下次收不到了 } /* USER CODE END 4 */ 再在主函数前面加个数组声明: /* USER CODE BEGIN PD */ uint8_t uart2_rxbuf[10]; /* USER CODE END PD */ 而声明接收几个数据在USART2的初始化后边加上: /* USER CODE BEGIN USART2_Init 2 */ HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 8); /* USER CODE END USART2_Init 2 */ 那么下载后运行如下: 我发送8个字符十六进制,也收到了十六进制。 然后我碰到个怪事。就是我变成ASC接收模式,我发的东东是小方块,可是我无论怎么按发射也打断不了FREERTOS发的东东。 想不明白这是怎么回事,截图如下: 这个我得好好想想,想也想不通。。。。。。。欲知想通了没能且听下回分解吧。    

  • 2020-12-17
  • 发表了主题帖: 【NUCLEO-L452RE测评】+消息队列

    消息对列我认为就是一个FREERTOS能够识别的数组,相当于全局变量。 以前我死烦消息队列,因为我认为全局数组完全可以代替它。今天的程序感觉挺好用。 首先用STM32CUBEMX新建项目,直接打开开发板,这样管脚和串口都不用定义。 然后建立两个任务,一个每隔一分钟向消息队列发一个1,另一个任务是收消息队列里的数。 还要建立一个消息队列16个数的默认消息队列:   然后生成MDK5代码。之后向两个任务中加代码: /* USER CODE BEGIN Header_mySendTaskfun */ /* USER CODE END Header_mySendTaskfun */ void mySendTaskfun(void const * argument) { /* USER CODE BEGIN mySendTaskfun */ for(;;) { osMessagePut(myQueue01Handle,1,0); osDelay(1000); } /* USER CODE END mySendTaskfun */ } /* USER CODE BEGIN Header_myReceivefun */ /* USER CODE END Header_myReceivefun */ void myReceivefun(void const * argument) { /* USER CODE BEGIN myReceivefun */ osEvent theEvent; for(;;) { theEvent = osMessageGet(myQueue01Handle,osWaitForever); if (theEvent.status == osEventMessage) { printf("Receive message......%d\n",theEvent.value.v); } } /* USER CODE END myReceivefun */ } 而消息队列的声明,STM32CUBEMX早已经定义好了: osMessageQDef(myQueue01, 16, uint16_t); myQueue01Handle = osMessageCreate(osMessageQ(myQueue01), NULL);     接着就是编译、下载、运行:       可见,FREERTOS的消息队列也不是很复杂。下次评测想写一个串口接收并给消息队列的程序。

  • 回复了主题帖: 【ST MEMS防水气压传感器LPS27HHW测评】+初识LPS27HHW

    jinglixixi 发表于 2020-12-17 00:18 ddllxxrr 发表于 2020-12-16 21:48 评测照片挺大,实际不大点。   2.7*2.7*1.7 mm能有多大点 ...
    应象照片那么大才对么

  • 2020-12-16
  • 回复了主题帖: 【ST MEMS防水气压传感器LPS27HHW测评】+初识LPS27HHW

    评测照片挺大,实际不大点。

  • 发表了主题帖: 【NUCLEO-L452RE测评】+STM32CUBEMX生成的程序加printf

    搞单片机的都知道,加printf得重定义fputc,我现在把步骤写一下,以后再有类似的问题也做为记号: 首先,正常用STM32CUBEMX生成程序,然后在头顶#include那块加入 #include "stdio.h" 这个是调用printf库函数声明。 然后在函数声明结尾加入: /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ int fputc(int c, FILE *stream) //重写fputc函数 { HAL_UART_Transmit(&huart2, (unsigned char *)&c, 1, 1000); return 1; } /* USER CODE END 0 */ 再三步在魔术棒下面把微库打上对号: 在程序里只加一个语句做为检验: printf("The RTOS is begin......"); 运行结果:   总结一哈:printf函数可以当调试器用,也可以代JTAG,就是到要观察的地方,打印出来一串数据。 ,如果实在没有串口,可以利用一个LED代替。    

  • 2020-12-15
  • 发表了主题帖: 【NUCLEO-L452RE测评】+按键控制发个二值信号量

    本帖最后由 ddllxxrr 于 2020-12-15 19:38 编辑 二值信号量任务与任务、中断与任务之间的同步。简单地说就是0和1的值。   首先用STM32CUBEMX建立一个二值信号量:       再点GPIO,在GPIO设置中,将NVIC,也就是板子上B1按键中断使能, 点生成程序。   在生成的程序中找到中断的代码:加入如下内容: void EXTI15_10_IRQHandler(void) { /* USER CODE BEGIN EXTI15_10_IRQn 0 */ /* USER CODE END EXTI15_10_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13); /* USER CODE BEGIN EXTI15_10_IRQn 1 */ /* USER CODE END EXTI15_10_IRQn 1 */ } void HAL_GPIO_EXIT_Callback(uint16_t GPIO_Pin) { osSemaphoreRelease(myBinarySem01Handle); } 再建立个线程,优先级都是默认: 这个线程是在收到由按键发来的信号后,发出一串字符:“I got it !!!” /* USER CODE END Header_StartTask02 */ void StartTask02(void const * argument) { /* USER CODE BEGIN StartTask02 */ /* Infinite loop */ for(;;) { osSemaphoreWait(myBinarySem01Handle, osWaitForever); HAL_UART_Transmit(&huart2,TxData2,15,0xffff);//把TxData的内容通过uart2发送出去,长度是10,timeout的时间是最大值0xffff osDelay(1); } /* USER CODE END StartTask02 */ } 实验现象: 当按下B1键并抬起时会发出“I got it!!!"     总结一下,如果程序不是抢占的情况下我觉得就用不着同步,只有个别程序老是抢着运行这就是制造麻烦,而RTOS中设一大批函数及信号量来解决这一问题。 谁有本事就几个线程不用抢占我想也会跑的很好。上述的程序有个缺点,就是只有在B1键抬起时,才能往下走,也就是说B1不抬起,始终是中断状态。 本人HAL不是很熟,这几天找一找再说吧。

  • 2020-12-13
  • 发表了主题帖: 【NUCLEO-L452RE测评】+加个FREERTOS定时器

    本帖最后由 ddllxxrr 于 2020-12-13 09:45 编辑 干么?还得用老办法看手册,找到定时器运行频率,然后找到公式算定时时间吗? 回答当然是不。社会是进步的,搞单片机的也得与时俱进。否则被时代的列车抛出很远,然后坐绿皮车赶回来。 用STM32CUBEMX中的FREERTOS不用算的。只需指指点点就行。   首先接着上篇的评测的界面来。点开FREERTOS,再接着点开,Config Parameters,把定时器使能: 然后在Timers and Semaphores中增加一个定时器名称: 然后生成代码,注意上次是选择的开发板,一些管脚是不用配置的都配置好了,我生成的是MDK5代码。 可见定时器定义代码已经写好,然后往代码里加一个定时时间。   /* Create the thread(s) */ /* definition and creation of defaultTask */ osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128); defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ osTimerStart(myTimer01Handle,2000) ; /* Start scheduler */ osKernelStart(); 然后在定时器回调函数里加个点灯代码: /* myTimeCallback01 function */ void myTimeCallback01(void const * argument) { /* USER CODE BEGIN myTimeCallback01 */ HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin); /* USER CODE END myTimeCallback01 */ }   编译下载,运行看到板子上的LD2,以2秒钟的间隔在闪烁。   总结一哈:STMCUBEMX确实是居家生活,开发程序之良器。

最近访客

< 1/6 >

统计信息

已有15775人来访过

  • 芯币:1313
  • 好友:53
  • 主题:677
  • 回复:10114
  • 课时:2
  • 资源:15

留言

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


azza333 2019-8-15
您好
LY941128 2018-2-1
你好,就是那个老美的滤波器的设计资源的第二部分下不了了。。。
泉盛电子 2014-11-15
...
307989542 2013-6-19
专业PCB生产厂家 板厚0.8--1.6 喷锡 尺寸5x5cm做10pcs之内50元 尺寸10* 10cm做10pcs之内100元(双面板所有拼版一款加50) 标准算法:(对数量及大小不符合以上规定的按下面算法进行) 货款:工程费+菲林费+板费 (工程费100元 菲林费5分/C㎡ 板费:5分/C㎡) 单,双层板: (杂油一律不加收如何费用) (喷锡无铅或者有铅工艺任选,不加收费用) 公司推行单双面12H 24H 48H 快速打样加急出货(免收测试费,飞针测试出货) 12H加急费500元 24小时加急板 加急费200元 48小时加急板 100元 批量价格:380元/平米起 联系人: 侯R 电 ... ...
626qinxiaomei 2013-4-22
你好,我想问一下,你写过让LM3S8962和LM3S2110实现双机通讯的程序吗?可不可以帮帮我,我搞不懂了。。。万分感谢
cuanli007 2012-8-10
就是串口中断进不去看一下谢谢 #include "msp430x14x.h" //#include "io430.h" //#include "nbc430.h" #include <stdio.h> #include <string.h> #include "GPS.h" #include "LCD.h" #include "display.h" char    rev_buf ;        //接收缓存      uchar   rev_start = 0;     //接收开始标志       uchar   rev_stop  = 0;  &nbs ... ...
查看全部