这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32L476 Nucleo板卡测试

共12条 1/2 1 2 跳转至

STM32L476 Nucleo板卡测试

菜鸟
2015-10-08 20:22:42     打赏

板卡受到好些天,也做了些测试,可惜发错地方了,今天挪到论坛来了,见谅!


开始还是要絮叨一下,介绍板卡!

先上靓照。。。。


再来看看板卡资源吧

STM32L476RGT6微控制器,基于ARM Cortex-M4处理器,带DSP,支持80MHz主频
支持Arduino UNO R3 Shield扩展板,微控制器所有IO口引脚通过排针座引出
ST-LINK/V2-1调试器,支持对外部微控制器调试
3个LED:一个USB通讯LED、一个电源LED、一个用户LED;两个机械按键:复位、用户
USB接口的3个不同功能:虚拟串口、容量存储、调试接口
3种不同供电方式:mini USB接口供电、IO引脚用电、通过Arduino UNO R3 Shield接口供电
支持Keil、IAR、embed在线IDE的设计工具


对于板子,自带开发调试中常用的ST-LINK/ V2-1调试器/编程器,只需要数据线就能连接电脑烧录程序,这点很给赞!
用的高个按键使用比较方便。板卡留有两排的arduino扩展接口,当然还有MCU扩展IO口,这里虽然扩展IO的排针是上下板面都足够长长排针,使用起来会比较方便,还是要吐槽一下,第一次拿起板子看那么多IO没有标记啊!!!后来发现标记在包装里的一张纸板上,这就需要一直留着这个纸板了,很不方便了。





主要的还是要关注处理器的性能,且看!


STM32L476RGT6微控制器特性: 板卡核心处理器是stm32l476RGT6,低功耗产品 ARM Cortex-M4处理器,支持80 MHz主频、1 MB闪存、128 KB的SRAM ,内置浮点运算单元(FPU, floating-point unit)可支持DSP指令,通用定时器*7、先进控制的计时器*2、基本定时器*2 SPI*3、I2C*3、USART*3、UART*2、USB OTG全速、CAN*1、SAI*2 SPDIF-接收*1、HDMI-CEC*1、LPUART*1、SDMMC、摄像头接口、LCD 8x28 or 4x32、GPIO*51 12个电容感应触摸通道、3个12位ADC配有16个通道,具有2个通道12位DAC、模拟比较器*2、运算放大器*2


STM32L4微控制器充分利用意法半导体丰富的低功耗技术,包括根据不同处理需求调整功耗的动态电压调整、内置FlexPowerControl的智能架构和有7个子模式选项的电源管理模式,其中包括停机、待机和最低功耗30nA的关机模式。意法半导体的批量采集模式(BAM)能使处理器在低功耗模式下仍可与通信外设高效交换数据。




关键词: STM32L4     板卡测试    

菜鸟
2015-10-08 20:38:34     打赏
2楼

STM32l4板卡测试2——工程搭建


因为没有找到stm32l4的固件库,就从stm32cubel4的文档中提取了一个库,头一次使用stm32cube,其生成的库和32的固件库还是有点区别,还不太适应它的写法,不过大体还是一样的。

像这样文件主体是和平时用的库文件一样的,DSP的文件主要放在了CMSIS里


打开工程如图,



DSP用到的文件可以放在ArmMath里面,自己的文件放在Driver 和Module 里

上图自带主函数,一部分是我做GPIO测试函数。


菜鸟
2015-10-08 20:49:59     打赏
3楼

忘了贴出来板卡说明书电路图了,在这发出来,还有工程模板文件


STM32L476-工程样板.zipstm32l476(3).pdf


菜鸟
2015-10-08 20:50:54     打赏
4楼
今日到此结束,大神路过还望批评指导,谢谢!

院士
2015-10-11 12:04:56     打赏
5楼

这个开发板可以用来玩ST的Cortex-M4芯片,也可以用来玩arduino。

还是一款非常不错的小玩具的


高工
2015-10-11 16:06:21     打赏
6楼
这个小板竟然可以带DSP,可以玩Cortex-M4和arduino真是醉了

菜鸟
2015-10-11 21:58:26     打赏
7楼

STM32L4板卡测试3—GPIO测试


打怪晋级:“一灯大师”,其实也是测试简单的IO配置,用灯做直观感受。

且看!!!




小灯闪啊闪!


再看代码慢慢道来》




实际IO口配置是和32的F1,F4系列的固件库配置是一样的,

开启相应IO时钟,定义一个结构体,mode 普通推挽输出,pull 上拉,Speed HIGH 选择引脚,再来个Init OK,就这么简单。

这里要说一下,由于我提取的CUBE库里对LED2时钟进行了专门的处理,


他是定义到 HAL_RCC_GPIOA_CLK_ENABLE()的,当我们打开 HAL_RCC_GPIOA_CLK_ENABLE()时发现他又在这定义,所以呢我们不用LED2_GPIO_CLK_ENABLE(),直接用HAL_RCC_GPIOA_CLK_ENABLE()是一样的,而且后者才是正统的,能普遍使用的时钟开启函数。


了,


再看一下F4的固件库时钟开启函数定义,






有没有很像,实际就是一样的。


再看Speed,他在这里。



分了四个速度等级,和F4固件库差不多。

在main()l里,调用了一个这样的 一个函数




就是用来切换IO电平的,这样灯才会闪闪闪!延时50闪瞎我了!!!


菜鸟
2015-10-11 22:06:57     打赏
8楼
要贴代码了!STM32L476-gpio.zip

菜鸟
2015-10-18 22:46:13     打赏
9楼

啊啊啊啊啊,搞半天搞得usart测试,写了那么多,结果点击回复时还要登陆,就全没了%>_<%,

明天再来,累死了


菜鸟
2015-10-19 19:51:44     打赏
10楼

stm32l4板卡测试4-usart测试


先上图




说实话,昨天今天都在搞printf,可惜没打通。


这里先把HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000);打印的发出来,

要打印的字符存在aTxBuffer里面。


先看程序1,串口配置


view plaincopy to clipboardprint?
  1. #include "test_usart.h"  
  2. #include "stm32l4xx_hal.h"  
  3. #include "stm32l4xx_nucleo.h"  
  4. #include "stdio.h"  
  5.   
  6. UART_HandleTypeDef UartHandle;  
  7.   
  8. //************ÆæµãÃðÁé-2015-10-18************//  
  9. void USART_CONF(void)  
  10. {    
  11.   GPIO_InitTypeDef  GPIO_InitStruct;  
  12.   
  13.       
  14.    __HAL_RCC_USART1_CLK_ENABLE();  
  15.    __HAL_RCC_GPIOA_CLK_ENABLE();  
  16.    
  17.   GPIO_InitStruct.Pin       = GPIO_PIN_9;  
  18.   GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;  
  19.   GPIO_InitStruct.Pull      = GPIO_PULLUP;  
  20.   GPIO_InitStruct.Speed     = GPIO_SPEED_HIGH;  
  21.   GPIO_InitStruct.Alternate = GPIO_AF7_USART1;  
  22.   
  23.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  
  24.   
  25.   /* UART RX GPIO */  
  26.   GPIO_InitStruct.Pin = GPIO_PIN_10;  
  27.   GPIO_InitStruct.Alternate = GPIO_AF7_USART1;  
  28.   
  29.   HAL_GPIO_Init( GPIOA, &GPIO_InitStruct);  
  30.       
  31.     UartHandle.Instance        =  USART1;  
  32.   
  33.   UartHandle.Init.BaudRate   = 115200;  
  34.   UartHandle.Init.WordLength = UART_WORDLENGTH_8B;  
  35.   UartHandle.Init.StopBits   = UART_STOPBITS_1;  
  36.   UartHandle.Init.Parity     = UART_PARITY_NONE;  
  37.   UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;  
  38.   UartHandle.Init.Mode       = UART_MODE_TX_RX;  
  39.     HAL_UART_Init(&UartHandle);  
  40.   
  41. }  
  42.   
  43.   
  44.   
  45. void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLenght, uint32_t Offset)  
  46. {  
  47.     uint16_t IndexTmp = 0;  
  48.   
  49.    /* Put in global buffer same values */  
  50.     for (IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ )  
  51.     {  
  52.       pBuffer[IndexTmp] = IndexTmp + Offset;  
  53.      }  
  54. }  
  55.   
  56.   
  57. #ifdef __GNUC__  
  58.   
  59. /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf 
  60. set to 'Yes') calls __io_putchar() */  
  61. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)  
  62. #else  
  63.   
  64. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)  
  65. #endif /* __GNUC__ */  
  66.   
  67. /** 
  68. * @brief Retargets the C library printf function to the USART. 
  69. * @param None 
  70. * @retval None 
  71. */  
  72. PUTCHAR_PROTOTYPE  
  73. {  
  74. /* Place your implementation of fputc here */  
  75. /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */  
  76. HAL_UART_Transmit( &UartHandle , (uint8_t *)&ch, 1, 0xFFFF);  
  77. return ch;  
  78. }  

 最后一部分是准备做printf用的,暂时没成功。串口配置f4固件库一样,不再多说。

这里说下穿口初始化函数,cube库中有

HAL_StatusTypeDef HAL_UART_Init( UART_HandleTypeDef *  huart ) 
HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart)

这样俩个初始化,关于区别一个关于UART,一个是USART,主要区别如下:

1、UART:universal asynchronous receiver and transmitter通用异步收发器
2、USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器
也就是说:UART的一般只能用于异步串行通讯,而名称为USART的既可以用于同步串行通讯,也能用于异步串行通讯。
在STM32CubeMX中测试了一下同步通信和异步通信,自动生成的代码中,果然:
1、在使用异步通信时,自动调用的是HAL_StatusTypeDef HAL_UART_Init( UART_HandleTypeDef *  huart ) 初始化
2、在使用同步通信时,自动调用了HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart)初始化



再来看主函数


view plaincopy to clipboardprint?
  1. int main(void)  
  2. {  
  3.   uint8_t i=0;  
  4.     
  5.     uint8_t aTxBuffer[] = " ***奇点灭灵-2015-10-19 **** ";  
  6.     HAL_Init();  
  7.   SystemClock_Config();  
  8.   USART_CONF(  );  
  9.   GPIO_CONF( );  
  10.   /* Infinite loop */  
  11.   while (1)  
  12.   {  
  13.           
  14.   
  15.     HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);  
  16.    HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000);  
  17.   
  18.         HAL_Delay(500);  
  19.           
  20.           
  21.   }  
  22.       
  23.       
  24. }  

 效果就是上图所示。 HAL_UART_Transmit就是串口发送函数,在函数的参数里有一个TXBUFFERSIZE,是要发送数组大小。

view plaincopy to clipboardprint?
  1. /* Size of Trasmission buffer */  
  2. #define TXBUFFERSIZE                      (COUNTOF(aTxBuffer) - 1)  
  3.   
  4. /* Exported macro ------------------------------------------------------------*/  
  5. #define COUNTOF(__BUFFER__)   (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))  

 

这里进行定义,计算。

大致就这样吧,printf功能还没实现,等实现了再说,路过晓得的望教导!


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]