这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 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 plain copy to clipboard print ?
  1. #include "test_usart.h"
  2. #include "stm32l4xx_hal.h"
  3. #include "stm32l4xx_nucleo.h"
  4. #include "stdio.h"
  5. UART_HandleTypeDef UartHandle;
  6. //************ÆæµãÃðÁé-2015-10-18************//
  7. voidUSART_CONF(void)
  8. {
  9. GPIO_InitTypeDef GPIO_InitStruct;
  10. __HAL_RCC_USART1_CLK_ENABLE();
  11. __HAL_RCC_GPIOA_CLK_ENABLE();
  12. GPIO_InitStruct.Pin = GPIO_PIN_9;
  13. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  14. GPIO_InitStruct.Pull = GPIO_PULLUP;
  15. GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  16. GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  17. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  18. /* UART RX GPIO */
  19. GPIO_InitStruct.Pin = GPIO_PIN_10;
  20. GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  21. HAL_GPIO_Init( GPIOA, &GPIO_InitStruct);
  22. UartHandle.Instance = USART1;
  23. UartHandle.Init.BaudRate = 115200;
  24. UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
  25. UartHandle.Init.StopBits = UART_STOPBITS_1;
  26. UartHandle.Init.Parity = UART_PARITY_NONE;
  27. UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  28. UartHandle.Init.Mode = UART_MODE_TX_RX;
  29. HAL_UART_Init(&UartHandle);
  30. }
  31. voidFill_Buffer(uint8_t *pBuffer, uint16_t BufferLenght, uint32_t Offset)
  32. {
  33. uint16_t IndexTmp = 0;
  34. /* Put in global buffer same values */
  35. for(IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ )
  36. {
  37. pBuffer[IndexTmp] = IndexTmp + Offset;
  38. }
  39. }
  40. #ifdef __GNUC__
  41. /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  42. set to 'Yes') calls __io_putchar() */
  43. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  44. #else
  45. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  46. #endif /* __GNUC__ */
  47. /**
  48. * @brief Retargets the C library printf function to the USART.
  49. * @param None
  50. * @retval None
  51. */
  52. PUTCHAR_PROTOTYPE
  53. {
  54. /* Place your implementation of fputc here */
  55. /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  56. HAL_UART_Transmit( &UartHandle , (uint8_t *)&ch, 1, 0xFFFF);
  57. returnch;
  58. }

最后一部分是准备做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 plain copy to clipboard print ?
  1. intmain(void)
  2. {
  3. uint8_t i=0;
  4. uint8_t aTxBuffer[] =" ***奇点灭灵-2015-10-19 **** ";
  5. HAL_Init();
  6. SystemClock_Config();
  7. USART_CONF( );
  8. GPIO_CONF( );
  9. /* Infinite loop */
  10. while(1)
  11. {
  12. HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
  13. HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000);
  14. HAL_Delay(500);
  15. }
  16. }

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

view plain copy to clipboard print ?
  1. /* Size of Trasmission buffer */
  2. #define TXBUFFERSIZE (COUNTOF(aTxBuffer) - 1)
  3. /* Exported macro ------------------------------------------------------------*/
  4. #define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))

这里进行定义,计算。

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


共12条 1/2 1 2 跳转至

回复

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