dsjsjf

  • 2019-03-12
  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】(5)ADC转换速度与精度测试

    本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!  STM32H7   NUCLEO_H743ZI   【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI   【 ST NUCLEO-H743ZI测评】(2)以太网测试   【 ST NUCLEO-H743ZI测评】(3)以太网转串口测试   【 ST NUCLEO-H743ZI测评】(4)移植Modbus测试(RTU) 上周公司安排出差了,没时间测试。。。回来第一件事就想着测试。 1、还是基于CUBEMX来配置工程,由于是选择的NUCLEO-H743ZI的默认工程配置,这里先把USB_OTG_FS关掉,再把主频调到400MHZ,ADC的时钟频率调到30MHz。 2、配置ADC,这里使用通道5,单端模式,16位数据,连续转换,使能中断,不知道为什么BoostMode 只能选择Disable。 3、配置一个定时器,使能1秒中断,用于计算每秒转换的次数。 4、生成工程,添加代码 /* USER CODE BEGIN 0 */ uint32_t ConvCount; uint16_t adcValue,Max,Min; void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {   ConvCount++;   adcValue = HAL_ADC_GetValue(hadc);   if(adcValue > Max)   {     Max = adcValue;   }   else if(adcValue < Min)   {     Min = adcValue;   } } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {   uint32_t TmpCount;   uint16_t TmpMax,TmpMin;   char string[200];   if(htim->Instance == TIM6)   {     HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);     TmpCount = ConvCount;     ConvCount = 0;     TmpMax = Max;     TmpMin = Min;     Max = Min = adcValue;     sprintf(string, "ADC_CLOCK_ASYNC_DIV1: conversion speed:%d /Sec, Max:%d, Min:%d \r\n", TmpCount, TmpMax, TmpMin);     HAL_UART_Transmit(&huart3, (uint8_t *)string, strlen(string), 1000);   } } /* USER CODE END 0 */ /**   * [url=home.php?mod=space&uid=159083]@brief[/url]  The application entry point.   * @retval int   */ int main(void) {   /* USER CODE BEGIN 1 */   /* USER CODE END 1 */   /* MCU Configuration--------------------------------------------------------*/   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */   HAL_Init();   /* USER CODE BEGIN Init */   /* USER CODE END Init */   /* Configure the system clock */   SystemClock_Config();   /* USER CODE BEGIN SysInit */   /* USER CODE END SysInit */   /* Initialize all configured peripherals */   MX_GPIO_Init();   MX_ETH_Init();   MX_USART3_UART_Init();   MX_ADC1_Init();   MX_TIM6_Init();   /* USER CODE BEGIN 2 */   HAL_ADC_Start_IT(&hadc1);   HAL_TIM_Base_Start_IT(&htim6);   /* USER CODE END 2 */   /* Infinite loop */   /* USER CODE BEGIN WHILE */   while (1)   {     /* USER CODE END WHILE */     /* USER CODE BEGIN 3 */   }   /* USER CODE END 3 */ }复制代码 5、查看转换结果,每秒转换百万次以上不成问题,当然这个速度还是比较粗略的,不是极限。 6、修改为256分频再看看结果如何。速度降下来了,但稳定性提高了。 7、再把采样周期改成最高ADC_SAMPLETIME_810CYCLES_5,采样速度依然不慢,稳定性也很高了。。当然,电路上只是在PB1口上接了一个可调电阻,无任何模拟电路处理。 sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;复制代码 此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-03-06
  • 回复了主题帖: 【 ST NUCLEO-H743ZI测评】(4)移植Modbus测试(RTU)

    懒猫爱飞 发表于 2019-3-2 08:40 1) 总结测试的很到位 2) 建议捎带着把modus的通信协议简单介绍一下,效果会更好^_^
    谢谢捧场

  • 2019-03-01
  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】(4)移植Modbus测试(RTU)

    本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持! STM32H7 NUCLEO_H743ZI 【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI 【 ST NUCLEO-H743ZI测评】(2)以太网测试 【 ST NUCLEO-H743ZI测评】(3)以太网转串口测试 串口和网口都调通了,接下来移植一个Modbus协议栈,在之前的CubeMX基础上,不需要配置其他外设。 一、在之前的工程中,添加Modbus协议栈源码及对应的include位置 二、修改port文件 mbportevent.c:主要实现事件通知,这里用FreeRTos的队列实现 mbportother.c:实现协议栈的临界段处理 mbportserial.c:实现串口初始化,发送处理,接收处理,等等。需要改里面的串口为usart3。 mbporttimer.c:实现Modbus所需要的定时(计时)功能,这里用FreeRTos的周期任务来实现的,也可以用硬件定时器或任务定时器等 具体实现代码作为附件上传。 三、main.c中添加代码     添加保持寄存器的回调处理函数 #include "mbport.h" #include "mbs.h" #include "mbutils.h" static uint16_t   usRegHoldingValue[16]; eMBException eMyRegHoldingCB( UBYTE * pubRegBuffer, USHORT usAddress, USHORT usNRegs, eMBSRegisterMode eRegMode ) {     eMBException    eException = MB_PDU_EX_ILLEGAL_DATA_ADDRESS;     STATIC const ULONG usRegsMappedAt = 0x0200;     ULONG           usRegStart = usAddress;     ULONG           usRegEnd = usAddress + usNRegs - 1;     USHORT          usIndex;     USHORT          usIndexEnd;     if( ( usNRegs > 0 ) &&         ( usRegStart >= usRegsMappedAt )         && ( usRegEnd

  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】(3)以太网转串口测试

    本帖最后由 dsjsjf 于 2019-3-1 11:16 编辑 本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持! STM32H7 NUCLEO_H743ZI 【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI 【 ST NUCLEO-H743ZI测评】(2)以太网测试 有了昨天的以太网回传测试,今天的以太网转串口就顺利多了。 一、首先在昨天工程的基础上,配置串口,这里用到了DMA及串口空闲中断 二、生成工程,修改原以太网接收回传处理函数 static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t                                  err) { //  tcp_write(tpcb,p->payload,p->len,1);   HAL_UART_Transmit_DMA(&huart3, (uint8_t *)p->payload, p->len);//这里将TCP接收到的数据,通过串口发送   pbuf_free(p);   return ERR_OK; }复制代码 三、添加串口空闲处理函数,并在串口中断用调用 static uint8_t UsartRcvBuff[512]; static uint16_t DataLength; void UsartIdle_Callback(void) {   uint32_t TmpFlag = 0;   TmpFlag = __HAL_UART_GET_FLAG(&huart3, UART_FLAG_IDLE);   if ((TmpFlag != RESET))   {     __HAL_UART_CLEAR_IDLEFLAG(&huart3);     HAL_UART_AbortReceive_IT(&huart3);     DataLength = 512 - (__HAL_DMA_GET_COUNTER((DMA_HandleTypeDef *)&hdma_usart3_rx));     osSignalSet(defaultTaskHandle, 1);   } }复制代码 void USART3_IRQHandler(void) {   /* USER CODE BEGIN USART3_IRQn 0 */   extern void UsartIdle_Callback(void);   /* USER CODE END USART3_IRQn 0 */   HAL_UART_IRQHandler(&huart3);   /* USER CODE BEGIN USART3_IRQn 1 */   UsartIdle_Callback();        //此处添加串口空闲处理调用   /* USER CODE END USART3_IRQn 1 */ }复制代码 四、在任务中添加处理串口接收到的数据,并通过以太网发送 void StartDefaultTask(void const * argument) {   /* init code for LWIP */   MX_LWIP_Init();   /* USER CODE BEGIN 5 */   osEvent Event;   tcp_echoserver_init();   __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);   HAL_UART_Receive_DMA(&huart3, UsartRcvBuff, 512);   /* Infinite loop */   for(;;)   {     Event = osSignalWait(1, 20);     if (Event.status == osEventSignal)     {       if(tcp_echoserver_pcb !=NULL)       {         tcp_write(tcp_echoserver_pcb, UsartRcvBuff, DataLength,1);       }       HAL_UART_Receive_DMA(&huart3, UsartRcvBuff, 512);     }   }   /* USER CODE END 5 */ }复制代码 五、编译运行测试,以太网与串口数据相互转换OK 此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-02-28
  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】(2)以太网测试

    本帖最后由 dsjsjf 于 2019-3-1 11:15 编辑 本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持! STM32H7 NUCLEO_H743ZI 【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI 几经周折,终于搞定了以太网。因为有STM32CUBEMX,本以为花个2个小时就能搞定的,却花了几天时间。 先说一下以前玩NUCLEO-F767ZI板以太网的吧,好作个比较,ETH配置只要把PHY Address设为0,DHCP Disabled,手动填入IP地址等,生成工程;while(1)中加入MX_LWIP_Process();就可以ping 通了。 而NUCLEO-H743ZI的配置就相对多了。下面来详细配置一下: 一、在上次工程的基础上,首先配置CORTEX-M7 二、配置ETH,使能全局中断,注意那句Warning,一会要用到 三、使能FreeRTos,保持默认配置 四、使能LWIP,Platform中选择LAN8742,General中禁用DHCP,IP地址根据自己电脑的配置 五、重新生成代码,并打开,将RAM的起始地址修改为刚才那句警告中的 六、编译运行,ping一下,可以ping通了 七,加入tcp回传测试,添加以下代码 #include "stats.h" #include "lwip/api.h" #include "lwip/tcp.h" void tcp_echoserver_init(void); static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb,err_t err); static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t                                  err); static struct tcp_pcb *tcp_echoserver_pcb; void tcp_echoserver_init(void) {   err_t err;   tcp_echoserver_pcb = tcp_new();   if(tcp_echoserver_pcb !=NULL)   {     err = tcp_bind(tcp_echoserver_pcb,IP_ADDR_ANY,7);     if(err == ERR_OK)     {       tcp_echoserver_pcb = tcp_listen(tcp_echoserver_pcb);       tcp_accept(tcp_echoserver_pcb,tcp_echoserver_accept);     }     else     {       memp_free(MEMP_TCP_PCB, tcp_echoserver_pcb);     }   } } static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb,err_t err) {   /* initialize lwip tcp_recv callback function for newpcb */   tcp_recv(newpcb, tcp_echoserver_recv);   return ERR_OK; } static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t                                  err) {   tcp_write(tpcb,p->payload,p->len,1);   pbuf_free(p);   return ERR_OK; }复制代码 八、在任务中添加 tcp_echoserver_init(); void StartDefaultTask(void const * argument) {   /* init code for LWIP */   MX_LWIP_Init();   /* USER CODE BEGIN 5 */   tcp_echoserver_init();   /* Infinite loop */   for(;;)   {         osDelay(1);   }   /* USER CODE END 5 */ }复制代码 九、再次编译运行,打开网络调试助手,测试OK 测试结束,但学习还未结束,知其然也要知其所以然。 此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-02-24
  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI

    本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持! STM32H7 NUCLEO_H743ZI 其实开发板早应该收到了,怎奈在门卫处躺了几天,后来还是问小编要的单号才知道。。。 首先来个对比:左图H743,右图F767,除了MCU,其他完全一样。 接着,来点个灯,确认一下所有的工具环境等是否可用。。不知道是我个人原因还是所有的IAR8.2都不支持下载。后来更新了最新8.32.3版本才可以。1、和以往一样,用STM32CubeMX来配置生成工程,先要更新HAL库; 2、选择开发板(MCU) 3、填入项目名,生成代码 4、用IAR最新版本打开工程 5、在main函数中插入代码,编译下载运行,可以看到板上的LD2闪烁了。   /* Infinite loop */   /* USER CODE BEGIN WHILE */   while (1)   {     /* USER CODE END WHILE */     HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);     HAL_Delay(500);     /* USER CODE BEGIN 3 */   }   /* USER CODE END 3 */复制代码 至此,一个最最基础的工程完工。 此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-02-21
  • 回复了主题帖: ST NUCLEO-H743ZI测评名单出炉

    快递已寄了吗?能不能提供一下单号

  • 2019-02-15
  • 回复了主题帖: ST NUCLEO-H743ZI测评名单出炉

    个人信息正确

最近访客

< 1/3 >

统计信息

已有107人来访过

  • 芯币:73
  • 好友:--
  • 主题:6
  • 回复:18
  • 课时:--
  • 资源:--

留言

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


现在还没有留言