标签目录:摩登3登录网址

摩登3测速登录地址_​AI你到底行不行?能找到秃头元凶,却光头&足球傻傻分不清

本文来源:物联网智库 一边,腾讯 AI Lab通过自研AI工具揭示了“秃头元凶”;另一边,AI摄像头在足球赛中将边裁的光头错认为足球,观众看了个寂寞。AI你到底行不行? 今年9月,百度宣布与人民日报社合作共建人工智能媒体实验室,具体来讲就是利用人工智能技术对新闻素材进行自动解读、加工与纠错,确定需要展示的关键信息。在此之前,微软就已经开始将新闻业务转向AI,并鼓励新闻工作者使用AI帮助其扫描、处理、过滤信息以及图片,并终止了与媒体公司PA Media的合作。 “AI编辑部”的报道一出,各位媒体圈的打工人也是心里一颤,我们每天编辑着“人工智能如何取代人工”的新闻,难道也要发生在自己身上了? 近年,人工智能对人类最明目张胆的“挑衅”当属AlphaGo先后击败围棋世界冠军、职业九段棋手李世石与世界围棋冠军柯洁。一战成名后,AI便昂首阔步地进入了大众视野。 目前,AI在toB产业端与toC消费端两面开花,取得了不俗的成绩,但“机器大脑”终究还是受制于数据、编程,无法自主思考,导致其在复杂多变的实际生产、生活场景中并不具备随机应变的能力,也引发了不少令人啼笑皆的“事故”。 “真”智能 VS “假”聪明 早在AlphaGo之前,人们就已经开始在各行各业中探索人工智能技术的产业应用了,通信技术、物联网等技术的发展更是滋润了AI的落地土壤,使其在商业化落地的淬炼中不断迭代升级,发挥其超强的数据学习能力与分析能力,为产业智能化转型提供了坚实的技术保障。 近日,“腾讯AI找到秃头元凶”的消息频频出现在各大科技媒体的头条——腾讯 AI Lab 采用“从头折叠”的蛋白质结构预测方法帮助解析了II型5a还原酶(SRD5A2)晶体结构,并通过自研AI工具“ tFold”有效提升了蛋白质结构预测精度,揭示了治疗脱发和前列腺增生的药物分子“非那雄胺”对于该酶的抑制机制。 非医学专业的秃头党可能是一头雾水。首先,我们要搞明白为什么会脱发。脱发起因复杂,主要有感染、内分泌障碍、神经精神因素、皮肤病等,其中雄激素性脱发主要与人体内的二氢睾酮有关,它由SRD5A2催化合成。因此,当患者因为二氢睾酮水平过高而出现脱发问题时,可以通过抑制 SRD5A2 来降低患者二氢睾酮水平。 但是,SRD5A2的高分辨率结构信息却十分缺乏,导致SRD5A2催化二氢睾酮合成的机理以及非那雄胺抑制SRD5A2 酶活的机制并不清晰。“模板建模”是当前最普遍的蛋白结构预测手段,但前提是在人类已知的蛋白结构数据库当中,必须存在和预测的蛋白相似的结构,否则就无法使用。而“从头折叠”法则可以不依赖于模板来预测蛋白结构,但精度不高。腾讯 AI Lab 自研的 AI工具“tFold” 正是破解这一难题的关键,它通过多数据来源融合、深度交叉注意力残差网络、模板辅助自由建模三项创新技术实现了蛋白结构预测精度的大幅提升。 此外,AI在工业制造、安防、教育等领域也有不俗的表现——“AI 工业大脑”实现工厂内的人机协同、柔性生产;AI监控摄像头通过捕捉徘徊、长时间逗留等可疑行为预警事故;AI+云平台实现教育资源共享、AI+大数据分析为学生提供个性化教学、AI+MR为学生提供身临其境的教学环境…… 面向消费端,AI实时翻译在今年的双11直播中大放异彩,目前支持从中文到英语、俄语、西班牙语的实时翻译;微博原创视频博主@大谷Spitzer利用AI技术将1920年的影像资料重新上色、修复帧率、扩大分辨率,还原了100年前北京晚清的街景…… 博主@大谷Spitzer利用AI修复视频 得益于AI远强于人类的数据学习能力与分析能力,解决了工业制造、教育、医疗等领域的诸多痛点,然而,成也萧何败萧何,在工业制造、安防等领域表现优异的AI却在足球场上闹了笑话。 近日,在一场苏格兰足球冠军联赛中,主场球队在赛事直播中没有雇佣摄像团队,而是选用了一套名为Pixellot的AI摄像系统,该系统使用内置 AI 追踪技术的摄像头来制作实时高清视频内容。 据称,开发团队收集了数十万小时的体育赛事视频,用于对AI算法进行训练,但他们却忘了教AI辨别光头与足球,导致只要是边裁出现在镜头内,AI 就会把边裁的光头误认为是足球,并且“忠心追随”。 随后,Pixellot公司表示,在设计阶段没考虑到光头的影响,现在收集一些足球和光头的数据对算法进行微调就可以解决这一问题。但是,AI虽然学习了“秃头”数据,又如何保证下次不会被场边别的“球形物”影响呢? 图源:机器之心 据外媒报道,大型零售企业沃尔玛将停止运用机器人拣货、查价,原因是“人工处理的效果不亚于机器人”,尤其是疫情影响下,线上订单激增,机器人从接单到分拣、再到包装、出货的时间毫无优势可言。 我们所讲的人工智能其实是一个很宽泛的概念,其核心是机器学习与深度学习,但数据提供的参考有限,导致其在面对程序外的干扰项或突发情况时无法自主纠偏、灵活处理。如开篇所讲,人们既期待AI所带来的智能化应用,却又忌惮于被替代,但事实证明,AI目前还没那么智能。 首先是学习效率。AI“上岗”前需要学习大量的数据从而训练算法,虽然其学习速度远超于人类,但是需要超大规模的学习样本反复进行强化训练、不断优化认知,综合来看,AI的学习效率与人类相比并无太大的优势。 其次是处理速度。对标准模型而言,AI的强大算力拥有碾压式的速度优势,尤其是在工业制造、自动驾驶等低时延场景下,这也是工业AI可以实现工厂无人化运营的主要原因。反之,在复杂多变的应用场景中,AI的处理速度及精准度都会大打折扣。 最后是灵活性。AI运行离不开数据、算法、算力三大要素,它们为AI规划出了一套清晰、准确的运行路线,依据交互反馈来执行预先设定的命令。但是在实际生产、生活中仍然存在大量不可控的突发事件,尤其是toC端,以客服机器人与智能音箱为例,用户反馈的命令“千奇百怪”,AI终端就只能回答“对不起,这个问题我还没有学会”。 诚然,人工处理问题时的灵活思维与应变能力是AI难以逾越的短板。同时,AI在遇到复杂环境时的检测精度也仍然无法达到无人化的标准,其精度只能随数据规模逐步提升。但是,AI可以辅助人工完成部分基础性工作,但想达到“AI换人”恐怕还需要很长一段时间。 事无绝对,我们也应该秉承着辩证的思维看待包括AI在内的一众新兴科技,它们应该是辅助人类的智能化工具,而不是一味的模仿人类。我们应该合理利用其学习能力、分析能力赋能产业,但现阶段还是不能免除人工监督、干预环节,未来应聚焦提升AI应用的灵活性,丰富前期数据学习阶段的应用场景,综合考虑可能遇到的各类情况,将“人工智障”逐步训练为真正的人工智能。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册网站_单精度、双精度、多精度和混合精度计算的区别是什么?

关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 我们学过数学,都知道有理数和无理数,然后在有理数中有一类叫浮点数的数字,不知道大家对这些还有没有印象? 在软件编程的时候,我们也会用到浮点数,一种既包含小数又包含整数的数据类型。 下面就来讲讲关于浮点数中,单精度、双精度、多精度和混合精度计算的区别。 嵌入式专栏 1 关于圆周率 π 我们提到圆周率 π 的时候,它有很多种表达方式,既可以用数学常数3.14159表示,也可以用一长串1和0的二进制长串表示。 圆周率 π 是个无理数,既小数位无限且不循环。因此,在使用圆周率进行计算时,人和计算机都必须根据精度需要将小数点后的数字四舍五入。 在小学的时候,小学生们可能只会用手算的方式计算数学题目,圆周率的数值也只能计算到小数点后两位——3.14;而高中生使用图形计算器可能会使圆周率数值排到小数点后10位,更加精确地表示圆周率。在计算机科学中,这被称为精度,它通常以二进制数字来衡量,而非小数。 对于复杂的科学模拟,开发人员长期以来一直都依靠高精度数学来研究诸如宇宙大爆炸,或是预测数百万个原子之间的相互作用。 数字位数越高,或是小数点后位数越多,意味着科学家可以在更大范围内的数值内体现两个数值的变化。 借此,科学家可以对最大的星系,或是最小的粒子进行精确计算。 但是,计算精度越高,意味着所需的计算资源、数据传输和内存存储就越多。其成本也会更大,同时也会消耗更多的功率。 由于并非每个工作负载都需要高精度,因此 AI 和 HPC 研究人员可以通过混合或匹配不同级别的精度的方式进行运算,从而使效益最大化。NVIDIA Tensor Core GPU 支持多精度和混合精度技术,能够让开发者优化计算资源并加快 AI 应用程序及其推理功能的训练。 嵌入式专栏 2 单精度、双精度和半精度浮点格式之间的区别 IEEE 浮点算术标准是用来衡量计算机上以二进制所表示数字精度的通用约定。在双精度格式中,每个数字占用64位,单精度格式占用32位,而半精度仅16位。 要了解其中工作原理,我们可以拿圆周率举例。在传统科学记数法中,圆周率表示为3.14 x100。但是计算机将这些信息以二进制形式存储为浮点,即一系列的1和0,它们代表一个数字及其对应的指数,在这种情况下圆周率则表示为1.1001001 x 21。 在单精度32位格式中,1位用于指示数字为正数还是负数。指数保留了8位,这是因为它为二进制,将2进到高位。其余23位用于表示组成该数字的数字,称为有效数字。 而在双精度下,指数保留11位,有效位数为52位,从而极大地扩展了它可以表示的数字范围和大小。半精度则是表示范围更小,其指数只有5位,有效位数只有10位。 圆周率在每个精度级别表现如下: 嵌入式专栏 3 多精度和混合精度计算的差异 多精度 计算意味着使用能够以不同精度进行计算的处理器,在需要使用高精度进行计算的部分使用双精度,并在应用程序的其他部分使用半精度或单精度算法。 混合精度(也称为超精度)计算则是在单个操作中使用不同的精度级别,从而在不牺牲精度的情况下实现计算效率。 在混合精度中,计算从半精度值开始,以进行快速矩阵数学运算。但是随着数字的计算,机器会以更高的精度存储结果。例如,如果将两个16位矩阵相乘,则结果为32位大小。 使用这种方法,在应用程序结束计算时,其累积得到结果,在准确度上可与使用双精度算法运算得到的结果相媲美。 这项技术可以将传统的双精度应用程序加速多达25倍,同时减少了运行所需的内存、时间和功耗。它可用于 AI 和模拟 HPC 工作负载。 随着混合精度算法在现代超级计算应用程序中的普及,HPC 专家 Jack Dongarra 提出了一个新的基准,即 HPL-AI,以评估超级计算机在混合精度计算上的性能。 混合精度计算主要用于现在很火人工智能领域,感兴趣的读者可以上网搜索更多关于混合精度计算的内容。 ———— END ———— C语言预处理命令分类和工作原理 浅谈Makefile、Kconfig和.config文件 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台登录_STM32如何高效接收串口数据?

目录 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头文件源码 DMA的基本配置 环形队列接收数据 函数原型 参考用例 总结 硬件:stm32f103cbt6软件:STM32F10x_StdPeriph_Lib_V3.5.0 DMA,直接内存存取,可以用它的双手释放CPU的灵魂,所以,本文通过USART3进行串口收发,接受使用DMA的方式,无需CPU进行干预,当接受完成之后,数据可以直接从内存的缓冲区读取,从而减少了CPU的压力。 具体的代码实现如下: usart_driver.h  封装了接口,数据接收回调函数类型,基本数据结构等; usart_driver.c  函数原型实现,中断服务函数实现等; 拷贝这两个文件即可,可以根据目录下的参考用例,进行初始化。 头文件usart_driver.h已经声明了外部函数可能用到的接口; USART3_DR的地址 因为USART3接收到数据会存在DR寄存器中,而DMA控制器则负责将该寄存器中的内容一一搬运到内存的缓冲区中(比如你定义的某个数组中),所以这里需要告诉DMA控制去哪里搬运,因此需要设置USART3_DR的总线地址。 USART3的基址如下图所示; USART3的基址 DR寄存器的偏移地址如下图所示; DR偏移地址 所以最终地址为:0x40004800 + 0x004#define USART_DR_Base 0x40004804 DMA的通道 因为有很多外设都可以使用DMA,比如ADC,I2C,SPI等等,所以,不同的外设就要选择属于自己的DMA通道,查找参考手册; DMA通道 因此USART3_RX在这里会使用DMA1的通道3,这都是硬件上已经预先分配好的,我们需要遵循这个规则。所以在代码中我们做出相应的定义;如下所示; #define USART_Rx_DMA_Channel    DMA1_Channel3 DMA的中断 DMA支持三种中断:传输过半,传输完成,传输出错; DMA中断 因此在使用是相当安全也相当灵活,而本文只是用了传输完成中断;如下定义了,传输完成中断的标志位,DMA1_FLAG_TC3也就对应了图中的TCIF; #define USART_Rx_DMA_FLAG       DMA1_FLAG_TC3 USART接收回调函数 在STM32的HAL中封装了大量外设的回调函数,使用起来十分方便,但是标准库中则没有这样的做法,但是这里我们可以自己实现,rx_cbk就是回调,即串口数据接收完成就会执行已经注册的回调函数; typedef void (*rx_cbk)(void* args); 通过使用接口usart_set_rx_cbk进行回调函数的注册,pargs为将传递的参数指针; void usart_set_rx_cbk(uart_mod_t *pmod, rx_cbk pfunc,void *pargs); 头文件源码 #ifndef USART_DRIVER_H#define USART_DRIVER_H#include  #include  /* Private function prototypes -----------------------------------------------*/#define USE_MICROLIB_USART 1#if USE_MICROLIB_USART#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf   set to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)//#define GETCHAR_PROTOTYPE int fgetc(FILE *f)#endif /* __GNUC__ */extern PUTCHAR_PROTOTYPE;#else#endif //default 8N1#define COM_PORT USART3#define TX_PIN  GPIO_Pin_10#define RX_PIN  GPIO_Pin_11#define BAUDRATE 115200#define IRQ_UART_PRE 3#define IRQ_UART_SUB 3#define USART_Rx_DMA_Channel    DMA1_Channel3#define USART_Rx_DMA_FLAG       DMA1_FLAG_TC3#define USART_DR_Base           0x40004804#define USART_BUF_SIZE   ((uint16_t)16)typedef void (*rx_cbk)(void* args);struct uart_mod {  uint8_t rx_buf[USART_BUF_SIZE]; uint8_t rx_dat_len; uint8_t head; uint8_t tail;   void (*init)(void);  void *pargs; rx_cbk pfunc_rx_cbk;};typedef struct uart_mod uart_mod_t;extern  uart_mod_t user_uart_mod;void usart_init(void);void usart_set_rx_cbk(uart_mod_t *pmod, rx_cbk pfunc,void *pargs);void usart_send_char(char ch);void usart_test_echo(void);uint8_t usart_recv_char(void);int usart_printf(const char *fmt, ...);//extern GETCHAR_PROTOTYPE;#endif DMA的基本配置 串口接收DMA的配置在函数dma_init中; static void dma_init(void) 已经定义了数据缓冲区,如下: uint8_t RxBuffer[USART_BUF_SIZE] = { 0 }; 因此需要在DMA的配置中设置USART_DR的地址,和数据缓冲区的地址,以及两者的大小;还有就是数据流向; 寄存器流向内存; 内存流向寄存器;这个需要搞清楚;相关配置如下所示;  DMA_InitStructure.DMA_PeripheralBaseAddr = USART_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer;   DMA_InitStructure.DMA_BufferSize = USART_BUF_SIZE; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; 注意:DMA_DIR_PeripheralSRC表示,外设作为源地址,数据是从外设寄存器流向内存,即DMA会把数据从地址USART_DR_Base搬运到RxBuffer去。如果这个地方搞错,会导致RxBuffer始终没有你想要的数据。 环形队列接收数据 线性缓冲区会因为缓冲器接收数据已满导致无法继续接收的问题;而环形队列进行接收的话,会自动进行覆盖,这样一来,在读取数据的时候,也要配置一个环形队列进行数据处理,下面的配置是把DMA配置为循环模式; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; 在结构体user_uart_mod中,则用两个变量分别指向队首head和队尾tail;具体数据的读取在函数USART3_IRQHandler中,会把数据从内存的RxBuffer读取到结构体user_uart_mod的成员变量rx_buf中;最终调用回调函数。 函数原型 usart_driver.c #include  #include  #include "stm32f10x_usart.h"#include "usart_driver.h"uint8_t RxBuffer[USART_BUF_SIZE] = { 0 };uart_mod_t user_uart_mod = { .rx_dat_len = 0, .head = 0, .tail = 0, .pfunc_rx_cbk = NULL, .pargs = NULL};static USART_InitTypeDef USART_InitStructure;static void rcc_init(void){ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* Enable GPIO clock */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB        | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE);}static void gpio_init(void){  GPIO_InitTypeDef GPIO_InitStructure;  /* Configure USART Tx as alternate function push-pull */  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  GPIO_InitStructure.GPIO_Pin = TX_PIN;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  GPIO_Init(GPIOB, &GPIO_InitStructure);  /* Configure USART Rx as input floating */  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  GPIO_InitStructure.GPIO_Pin = RX_PIN;    GPIO_Init(GPIOB, &GPIO_InitStructure);}static void dma_init(void){  DMA_InitTypeDef DMA_InitStructure;  /* USARTy_Tx_DMA_Channel (triggered by USARTy Tx event) Config */  DMA_DeInit(USART_Rx_DMA_Channel); DMA_InitStructure.DMA_PeripheralBaseAddr = USART_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer; //DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = USART_BUF_SIZE; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(USART_Rx_DMA_Channel, &DMA_InitStructure);}static void irq_init(void){ NVIC_InitTypeDef NVIC_InitStructure; /* Enable the USART3_IRQn Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = IRQ_UART_PRE; NVIC_InitStructure.NVIC_IRQChannelSubPriority = IRQ_UART_SUB; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);}void usart_send_char(char ch){ /* Loop until the end of transmission */ //while (USART_GetFlagStatus(COM_PORT, USART_FLAG_TC) == RESET){} while((COM_PORT->SR & USART_FLAG_TC) != USART_FLAG_TC){  }  USART_SendData(COM_PORT, (uint8_t) ch);}uint8_t usart_recv_char(){ /* Wait the byte is entirely received by USARTy */    //while(USART_GetFlagStatus(COM_PORT, USART_FLAG_RXNE) == RESET){} while((COM_PORT->SR & USART_FLAG_RXNE) != USART_FLAG_RXNE){  }     /* Store the received byte in the RxBuffer1 */    return (uint8_t)USART_ReceiveData(COM_PORT);}int usart_printf(const char *fmt, ... ){    uint8_t i = 0;    uint8_t usart_tx_buf[128] = { 0 };    va_list ap;    va_start(ap, fmt );    vsprintf((char*)usart_tx_buf, fmt, ap);    va_end(ap);  while(usart_tx_buf[i] && i < 128){  usart_send_char(usart_tx_buf[i]);     i++; }     usart_send_char('\0'); return 0;}void usart_test_echo(){ uint8_t tmp_dat = 0xff; tmp_dat = usart_recv_char(); usart_send_char(tmp_dat);}void usart_init(void){ rcc_init (); gpio_init (); irq_init();  /* USARTx configured as follow:  - BaudRate = 115200 baud    - Word Length = 8 Bits  - One Stop Bit  - No parity  - Hardware flow control disabled (RTS and CTS signals)  - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = BAUDRATE; 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_Rx | USART_Mode_Tx; /* USART configuration */ USART_Init(COM_PORT, &USART_InitStructure); USART_ITConfig(COM_PORT, USART_IT_IDLE, ENABLE); //USART_ITConfig(COM_PORT, USART_IT_RXNE, ENABLE); /* Enable USART */ USART_Cmd(COM_PORT, ENABLE);  USART_DMACmd(COM_PORT,USART_DMAReq_Rx, ENABLE); dma_init(); DMA_ITConfig(USART_Rx_DMA_Channel, DMA_IT_TC, ENABLE);  DMA_ITConfig(USART_Rx_DMA_Channel, DMA_IT_TE, ENABLE); DMA_Cmd(USART_Rx_DMA_Channel, ENABLE); }void usart_set_rx_cbk(uart_mod_t *pmod, rx_cbk pfunc,void *pargs){ pmod->pargs = pargs; pmod->pfunc_rx_cbk = pfunc;}void DMA1_Channel3_IRQHandler(void){     if(DMA_GetITStatus(USART_Rx_DMA_FLAG) == SET){                DMA_ClearITPendingBit(USART_Rx_DMA_FLAG);    }}/**  * @brief  This function handles USART3 global interrupt request.  * @param  None  * @retval None  */void USART3_IRQHandler(void){ uint8_t buf[USART_BUF_SIZE]; uint16_t rect_len = 0; if(USART_GetITStatus(COM_PORT, USART_IT_IDLE) != RESET)  {  uint8_t i = 0;  USART_ReceiveData(COM_PORT);  user_uart_mod.head = USART_BUF_SIZE - DMA_GetCurrDataCounter(USART_Rx_DMA_Channel);    //fifo is not full   while(user_uart_mod.head%USART_BUF_SIZE != user_uart_mod.tail%USART_BUF_SIZE){      user_uart_mod.rx_buf[i++] = RxBuffer[user_uart_mod.tail++%USART_BUF_SIZE];  }  user_uart_mod.rx_dat_len = i;  //DMA_Cmd(USART_Rx_DMA_Channel, ENABLE);  if(user_uart_mod.pfunc_rx_cbk != NULL){   user_uart_mod.pfunc_rx_cbk(user_uart_mod.pargs);  } } USART_ClearITPendingBit(COM_PORT, USART_IT_IDLE); //USART_ClearITPendingBit(COM_PORT, USART_IT_RXNE);}#if USE_MICROLIB_USART/**  * @brief  Retargets the C library printf function to the USART.  * @param  None  * @retval None  */PUTCHAR_PROTOTYPE{ /* Place your implementation of fputc here */ /* e.g. write a character to the USART */ USART_SendData(COM_PORT, (uint8_t) ch); /* Loop until the end of transmission */ while (USART_GetFlagStatus(COM_PORT, USART_FLAG_TC) == RESET) {} return ch;}#else#pragma import(__use_no_semihosting)                          struct __FILE {  int handle; }; FILE __stdout;       int _sys_exit(int x){  x = x;  return 0;} int fputc(int ch, FILE *f){       /* Place your implementation of fputc here */ /* e.g. write a character to the USART */ USART_SendData(COM_PORT, (uint8_t) ch); /* Loop until the end of transmission */ while (USART_GetFlagStatus(COM_PORT, USART_FLAG_TC) == RESET) {} return ch;}#endif 参考用例 这里需要调用usart_init,并设置回调函数,如果不设置,则不会执行回调。 void motor_get_cmd_from_uart(void *pargs){  if(pargs == NULL){  return; }  uart_mod_t *p = pargs; if(p->rx_dat_len > 0 && p->rx_dat_len == PACKAGE_SIZE){  if(p->rx_buf[0] == PACKAGE_HEAD   && p->rx_buf[PACKAGE_SIZE - 1] == PACKAGE_TAIL){   user_cmd_mod.head = p->rx_buf[0];   user_cmd_mod.cmd.value_n[0] = p->rx_buf[1];   user_cmd_mod.cmd.value_n[1] = p->rx_buf[2];      user_cmd_mod.option = p->rx_buf[3];      user_cmd_mod.data.value_n[0] = p->rx_buf[4];   user_cmd_mod.data.value_n[1] = p->rx_buf[5];   user_cmd_mod.data.value_n[2] = p->rx_buf[6];   user_cmd_mod.data.value_n[3] = p->rx_buf[7];      user_cmd_mod.tail = p->rx_buf[PACKAGE_SIZE - 1];   user_cmd_mod.process_flag = 1;  }   } p->rx_dat_len = 0; }int main(void){ usart_init(); usart_set_rx_cbk(&user_uart_mod, motor_get_cmd_from_uart,&user_uart_mod);} 总结 本文简单介绍了基于STM32基于DMA,利用串口空闲中断进行串口数据接收的具体配置和实现方法,代码基于标准库3.5版本;因为标准库ST目前已经不再更新,并且ST提供了cubemx工具可以进行基于HAL库和LL库的外设快速配置,从而简化大量工作;当然为了不掉头发感觉撸寄存器也不错,最终适合自己的才是最好的。 —— The End — — 推荐好文   点击蓝色字体即可跳转  感觉身体被掏空!只因为肝了这篇空间矢量控制算法  我打赌!你还不会UART  PID微分器与滤波器的爱恨情仇  简易PID算法的快速扫盲 增量式PID到底是什么? 三面大疆惨败,因为不懂PID的积分抗饱和 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3新闻554258:_芯片产能供不应求,台积电大规模下单光刻机

近半年来,芯片代工几乎进入行业旺季,许多芯片订单超过半年的排队期。芯片代工厂无法消耗如此之多芯片订单,导致产能无法赶上市场消耗,许多企业只能选择自己购买芯片制造设备。 而据TOMSHARDWARE报道,台积电表示其部署的极紫外光(EUV)光刻工具已占全球安装和运行总量的50%左右,这意味着其使用的EUV机器数量超过了业内其他任何一家公司。为了保持领先,台积电已经下单订购了至少13台ASML的Twinscan NXE EUV光刻机,将在2021年全年交付,不过具体的交付和安装时间表尚不清楚。同时,台积电明年的实际需求可能高达16 – 17台EUV光刻机。 在抢购EUV光刻机上,虽然台积电抢占先机,但是台积电也在为光刻机的事情发愁,甚至有报道声称碰过会将一部分M1芯片交给三星代工,主要还是因为台积电5nm产能不足,其实我们所讲述的产能不足,就是一个相对应的概念,要是市场上面的需求量不多的话,那么就不会出现这种供不应求的事情。 不仅仅是苹果、高通等科技巨头都需要用到这种先进的工艺技术,这里面已经不光包含了5nm工艺,就连7nm工艺也是需要用到EUV光刻机的,但是EUV光刻机的数量确实还有限,虽然我们现在说台积电斥巨资购买了55台光刻机,但是这么多台机器还不够满足市场所需吗? 台积电使用ASML的Twinscan NXE EUV光刻机在其N7+以及N5节点上制造芯片,但在未来几个季度,该公司将增加N6(实际上将在2020年第四季度或2021年第一季度进入HVM)以及同样具有EUV层的N5P工艺。台积电对EUV工具的需求正在增加是因为其技术越来越复杂,更多地方需要使用极紫外光刻工具处理。台积电的N7+使用EUV来处理最多4层,以减少制造高度复杂的电路时多图案技术的使用。 根据ASML的官方数据,2018年至2019年,每月产能约4.5万片晶圆(WSPM),一个EUV层需要一台Twinscan NXE光刻机。随着工具生产效率的提高,WSPM的数量也在增长。如果要为一个准备使用N3或更先进节点制造工艺的GigaFab(产能高于每月10万片)配备设备,台积电在该晶圆厂至少需要40台EUV光刻设备。 ASML最新推出的Twinscan NXE:3400B和NXE:3400C光刻系统价格相当昂贵。早在10月份,ASML就透露,其订单中的4套EUV系统价值5.95亿欧元(约合7.03亿美元),因此单台设备的成本可能高达1.4875亿欧元(1.7575亿美元)。也就是说,13套EUV设备可能要花费台积电高达22.84亿美元。 但在EUV工具方面,钱并不是唯一的考虑因素。ASML是唯一生产和安装EUV光刻机的公司,它的生产和安装能力相对有限。在对其生产工艺进行调整后,该公司认为可以将单台机器的周期缩减到20周,这样一来,每年的产能将达到45到50套系统。 今年的前三季度,ASML已经出货了23台EUV光刻机,预计全年销售量比2020年原计划的35台少一点。截至目前,ASML已累计出货83台商用EUV光刻机(其中包括2015年第一季度至2020年第三季度销售的NXE:3350B、NXE:3400B和NXE:3400C)。如果台积电官方关于拥有全球已安装和运行Twinscan NXE光刻机中约50%这个说法是正确的,那么目前可能已经拥有30至40台EUV光刻机。 台积电当然不是唯一采购大量EUV光刻机的半导体制造商。三星目前只使用EUV工艺来生产其7LPP和5LPE SoC以及一些DRAM,但随着三星晶圆厂扩大EUVL工艺在生产上的应用,三星半导体也提高了基于EUV工艺的DRAM的生产,最终将不可避免地采购更多的Twinscan NXE光刻机。预计英特尔也将在2022年开始使用其7nm节点生产芯片时,将开始部署EUVL设备,很可能在未来几年成为EUVL设备的主要采用者之一。 未来几年全球对EUV光刻机的需求只会增加,但从目前的情况来看,在未来一段时间内,台积电仍将是这些光刻设备的主要采购者,三星和英特尔将紧随其后。虽然说现在台积电在制造技术上面已经在世界稳居第一,但是台积电还是非常依赖光刻机的,要是在短时间内无法达到生产效率,即便光刻机数量增多也无法解决问题。

摩登3登录网站_中国新能源车发展目标直指全球第一 近千亿扶持

  在汽车产销规模跃居世界第一后,中国在新能源车的发展目标也直指全球老大。   据悉,由工信部牵头制订的《节能与新能源汽车发展规划(2011年至2020年)》(以下简称《规划》)已经完成,目前正在向各相关部委征求意见。   如一切顺利,将于本月最终定稿并上报国务院批准,成为引领中国新能源汽车产业发展的重要政策。   这份《规划》详细列出了中国节能与新能源汽车的发展目标及一系列扶持方法。一旦落实,中国新能源汽车关键零部件产业将率先迎来高速发展。   空想建不成社会主义   十年后中国混合动力汽车年销量1500万辆?!2009年,我们卖了几辆混合动力汽车?比亚迪F3DM销量未过百、丰田普锐斯销量只有271辆、本田混合动力思域2009年的计划就只有300辆……很难想象,十年之后混合动力车型能在中国实现1500万辆的突破。   新能源车产业化全球第一?这个恐怕要有行业基础吧?前几年,我们豪迈地宣布在新能源领域,我们和国外站在同一起跑线上;最近,工信部领导承认,电动车和国外差距只有5年;再过几年,也许更多的人就会发现,嗯?怎么差距比传统汽车还大!   如果说“2020年年产销1500万辆混合动力汽车”还只是个有创意的“想法”,那么“新能源车达到500万辆”就实在是个天才的构想了。   什么是新能源车?按照“规划”的界定是“纯电动车和燃料电池车”,对这些车型,目前即使是技术最先进的丰田、通用、日产,也仅仅停留在试生产阶段,远未到大规模量产的阶段,十年后,我们就“规划”到500万辆,实在不知道这些车从何而来,又要到哪里充电,中国几大能源巨头,用了差不多两年的时间,只在为该用谁的充电站建设标准而吵架,建设好给500万辆新能源汽车的配套设施,先歇歇吧。   谈及规划,适度前瞻自然可以,但如果只是空想,就失去了其意义。   发展规划:市场规模世界第一   根据《规划》,纯电动汽车将成为汽车产业转型的重要战略方向。中国将最终实现插电式混合动力汽车及纯电动汽车的产业化;同时将加快研发燃料电池汽车技术。这与此前,新能源汽车补贴方案中侧重于电动车是一样的。   《规划》详细列出了中国节能与新能源汽车的发展目标,即到2020年,新能源汽车产业化和市场规模达到全球第一,其中新能源汽车(插电式混合动力汽车、纯电动汽车、氢燃料电池汽车等)保有量达到500万辆;以混合动力汽车为代表的节能汽车销量达到世界第一,年产销量达到1500万辆。   为完成以上目标,中国节能与新能源汽车发展将由易及难、分两步走:2011年至2015年,将大力发展节能汽车。一方面提高传统汽车的燃油经济性;另一方面实现普通混合动力汽车的大规模产业化,中度、重度混合动力乘用车保有量计划超过100万辆。2016年至2020年,将传统汽车的燃油经济性提高至国际先进水平;大规模普及混合动力汽车。具体而言,中度、重度混合动力乘用车年产销量超过300万辆;纯电动汽车和插电式混合动力汽车实现产业化,市场保有量希望超过500万辆。   根据《规划》,2015年,乘用车新车平均油耗水平较2008年下降35%,至5.9升/百公里。2020年,乘用车新车平均油耗达到4.5升/百公里。据悉,这一目标已经高于美国,与要求最高的欧盟处于同一水平。   建议投入巨额财政扶持   《规划》还明确提出,要形成3~5家新能源汽车整车骨干企业,形成2~3家具有自主知识产权和较强国际竞争力的动力电池、电机等关键零部件骨干企业,产业集中度达到80%以上。   鉴于新能源车现在发展还不成熟,通过财政补贴来拉动市场无疑是较快手段。《规划》建议中央财政设立专项补贴资金,并给予税收减免补贴。在未来十年,中央财政或拿出超过1000亿元的巨额资金,用以扶持节能与新能源汽车产业链发展。其中,500亿元为节能与新能源汽车产业发展专项资金,重点支持关键技术研发和产业化;300亿元用于支持新能源汽车示范推广;200亿元用于推广以混合动力汽车为重点的节能汽车;另外100亿元用于扶持核心汽车零部件业发展;50亿元用于试点城市基础设施项目建设。不过,在最新版本的《征求意见稿》中,却在规划中拿掉了具体金额。   《规划》建议,对购买节能与新能源汽车的消费者,减免车辆购置税及消费税。如在2015年前,对于新注册的纯电动汽车和充电式混合动力汽车消费者,免征车船税;对于购买普通混合动力汽车的消费者,减半征收车船税。而对于相关汽车企业,如列入《国家重点支持的高新技术领域》的整车企业及关键零部件企业,将享受国家有关高新技术企业所得税税收优惠政策。

摩登3注册网站_大厂抢攻技术高地 大尺寸OLED电视或于2014年面世

  被视为新一代面板的潜力军OLED,因画质优于液晶面板,且具有低耗电的特性而被称为梦幻面板,却因寿命短且不易生产大尺寸产品,而迟迟未有更大的发展。不过,近来旭哨子、SONY、住友化学等厂商仍积极研发相关技术,而台系厂包括友达主要是朝小尺寸,如手机应用等领域发展。专业研究机构DisplaySearch看好,大尺寸OLED电视可能于2014年出现。   旭硝子目前已研发出镀在OLED玻璃基板的新材料,可使OLED例子寿命延长至目前15倍以上,让目前寿命仅2-3年的OLED面板,耐用年现可以延长和液晶面板相同。旭硝子计划于明年开始量产,2020年营收将挑战50亿日圆目标。   SONY于2007年推出全球首台11吋的OLED面板电视后,目前针对控制OLED面板发光的晶体管研发出使用氧化物半导体的技术,特点是可用和液晶面板相同的制程来生产,有助于生产30吋以上的面板。   而住友化学持续进行涂布法制程的高分子PLED研发,并于2007年收购高分子PLED技术领先同业的英国创投企业,该公司与Panasonic合作,计划于今年生产40吋以上的大尺寸试验机,并于2012、2013年量产。   在台系厂商部分,过去OLED刚起步时,市场前景看好,许多厂商纷纷投入研发生产OLED产品。只不过在LCD面板大军压境下,许多厂商陆续退守。友达也将从2011年开始量产OLED显示器,不过生产的主要标的是瞄准手机、可携式产品等小尺寸装置应用的OLED面板。   而奇美电由于先前统宝光电在低温多晶硅(LTPS)面板发展已久,加上奇美电本身的奇晶光电也在OLED多所着墨,因此后续OLED也将成为奇美电发展重点。   专业研究机构DisplaySearch调查指出,2009年OLED面板市场规模为8亿美元,预期2014年将扩大至5倍以上,至44亿美元。目前OLED的用途主要以手机为大宗,DisplaySearch认为,大尺寸OLED电视可能要2014年才能登场。   虽然OLED面板技术在寿命、面积可望有所突破,但是由于液晶面板跌价速度以单年20%下降,若OLED面板成本削减速度无法追上液晶面板,OLED面板发展度仍有很大的限制。

摩登3注册登录网_台韩厂分食 三星AMOLED独占地位恐不保

  原本由三星集团(Samsung Group)独霸的主动式有机电激发光二极管(AMOLED)显示器市场,在多间台湾及韩国面板厂相继投产下,最快2011年初三星独占AMOLED市场份额将出现缩减。   三星SDI推出世界首款主动有机电激发光二极管(AMOLED)面板,以及Sony推出11吋AMOLED TV后,台、日、韩等地业者在AMOLED市场竞争越来越活络,包括LG Display、奇晶、TMD及三星电子(Samsung Electronics)等,都在AMOLED技术开发版图加快脚步,在可预见的未来,AMOLED将形成具竞争力的市场规模,同时在显示器产业占有一定成果。   被动有机电激发光二极管(PMOLED)最大生产制造商三星SDI持续开发AMOLED,目前三星SDI正把OLED事业重心转移到AMOLED,三星SDI将在2008年追加AMOLED投资,同时计划在2008年推出3吋以上产品。此外,三星SDI也计划于2009年少量生产14吋产品,同时于2010年生产30吋以上AMOLED TV。 奇美电子旗下奇晶光电也投入生产AMOLED面板,同时为购置机器设备,奇美电拟现金增资奇晶光电新台币10亿元,用来设置第2条AMOLED面板产线,2008年时,预期奇晶将会有AMOLED面板应用在数码相框上。   Sony除推出11吋AMOLED TV,也开发出多样AMOLED TV,目前正利用低分子物质与低温多晶硅(LTPS)进行AMOLED TV开发,除27吋产品可望问世,Sony对于30~40吋级OLED TV实用化也毫不松懈,以在LCD TV上广为使用的非晶硅(a-Si)基板为基础,开发出OLED用新基板,预计2009年可进行生产。   三星电子方面,除已发表世界最大40吋AMOLED TV,将在2008年6~8月间,在L1尝试生产白色AMOLED,正式发出向AMOLED事业进军信号,此外,三星亦计划利用第5代生产线进行大型OLED TV开发。 LG Display已将LG电子的PMOLED生产线,转变为AMOLED生产用,目前所生产AMOLED是2吋QVGA(320×240)产品,主要是做为内部手机使用。   LG Display相当集中于小型AMOLED面板开发,但对于AMOLED大型化研究也持续不断进行。 至于TMD、EID、Mitsubishi、Sumitomo以及Kyocera等公司,也都在进行AMOLED相关研发,其中,TMD已在2007年开发出利用高分子物质进行生产的20.8吋OLED TV。 在台、日、韩等地厂商前仆后继投入AMOLED面板技术版图研发与市场开发后,AMOLED市场规模将逐渐形成,并可望占有一席之地。

摩登3登录网站_高性能低功耗太阳能衡器SoC设计要点分析

  废旧电池对人类生存环境的威胁已经成为社会共识,通过降低功耗来减少电池使用量正在成为很多电子产品企业的选择。随着太阳能电池技术进步和低功耗半导体设计技术的发展,太阳能电池替代传统电池的应用逐渐出现。本文将介绍基于低功耗CSU11系列衡器SoC芯片的太阳能电子秤设计方案。   低功耗太阳能衡器设计要点   对于使用传统电池供电的衡器产品而言,通常受体积和成本限制,如果采用太阳能电池板,其面积必然有限,从而限制了太阳能电池板的供电电量。此外,太阳能电池板发电量低(室内μA级),并存在随着光线强度的差异电流不稳定的问题。因此,使用太阳能电池板供电的衡器解决方案需要解决以下问题:增加储能电路,让太阳能电池板发出的电量储存起来(在200流明下,一般只能提供几十μA电流);降低功耗,整机关机和工作电流分别均需在nA、μA级。   电子衡器耗电量大的主要是传感器、ADC、MCU三大块。为此,通常的解决方案需要采用以下方法来实现整体低功耗特性:对传感器采用间歇供电或脉冲供电来降低传感器用电功耗;采用高阻应变传感器;提高ADC输出速率,减少每次采样时间从而降低采样功耗;提高ADC有效位,以在高速下保证衡器精度;提高SoC运行速度以降低每MHz的功耗;降低LCD驱动电路功耗;提高集成度,减少外围器件。   芯海科技推出的高精度24位ADC芯片CS1242填补了国内中高端电子衡器芯片领域的空白。在满足高精度需求的同时,该公司针对当前低功耗应用的发展趋势,推出了具有极佳低功耗特性的CSU11系列衡器SoC芯片,最大的优势是同时满足了自动上秤人体秤、太阳能人体秤对低功耗的要求,以及口袋秤对高精度的要求。该系列产品综合考虑了上述低功耗设计因素,实现了极佳的低功耗特性,利用CSU11系列SoC设计的自动上秤人体秤,平均待机功耗可以低至3μA以下,太阳能人体秤称重电流20μA以下,口袋秤分度可以达到三万分之一。   CSU11系列SoC集成了8位RISC MCU,4K*16 OTP(可作为用户数据PROM)、256 RAM、4*18 LCD,以及16个I/O口(除了这16个I/O口外,所有的“Seg”口均可复用为输出,令IO总数最多达到26个),双通道高速、高精度ADC,最高数据输出速率为16kHz(精度为12位,增益为32),最高精度达到18位(增益为128,速率为32Hz)。为了能够在一个芯片上同时满足低功耗和高精度的要求,CSU11系列SoC还提供了“功耗-精度-速度”相互平衡的选项,即用户可以通过配置较低的ADC工作电流来实现低功耗,但此种情况下线性度较差,只能够用于5000点以下的秤,也可以配置较大的工作电流来实现30,000分度的精度和线性度,为方案工程师进行多种类型的方案开发提供便利,只需要在配置上稍作改动,就可以满足不同的市场需求。   太阳能人体秤的出现,主要是为了避免普通电池对环境的危害,达到环保的目的。但是,目前市面上的太阳能人体秤需要昂贵的传感器和PS08主芯片。高昂的造价成本极大地限制了太阳能人体秤的市场占有率。CSU11系列提供了专门为太阳能人体秤而设计的特性,设计时使用1KHz的AD输出速率,使用第四笔AD采样值。每秒钟称重一次,则所需的动态功耗为4次*2.5mA*(1/1000秒)=10μA,LCD显示所需的功耗为5μA(驱动电路工作电流)+5μA(玻璃消耗)=20μA。   目前,国内某大型衡器企业已经成功利用CSU1101B芯片开发了太阳能电子秤产品,并实现了批量生产,已经成功实现对欧美市场批量出口。该产品的平均工作电流小于等于25μA,在55流明光照强度下就可以起秤,完全可以适用于包括浴室在内的各种室内环境。其精度达到2,000分度,具有自动开机功能,关机平均电流低于3μA。  

摩登3新闻554258:_苹果iOS 4.2正式版成功越狱:附教程[组图]

     苹果官网关于iOS 4.2的页面截图   北京时间11月24日凌晨消息,iPhone Dev Team刚刚在其官方网站放出了Redsn0w 0.9.6b4(国内俗称“红雪”),成功为所有iOS 4.2.1设备实现越狱,运行Cydia和MobileSubstrate。此次越狱距苹果正式推出最新iOS 4.2版本操作系统仅24小时不到。   以下为使用Redsn0w 0.9.6b4为iOS 4.2.1越狱教程:    图1