你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G431RB-TEST

[复制链接]
zhjb1 发布时间:2019-11-13 15:25

<STM32G431测试>一、开箱GPIO测试

快递收到后立即开箱,与STM一贯的作风精简的塑料盒子包装的小开发板,支持Arduino的插座,和引出芯片引脚的双排2.54插针。见照片1-1

首先想起的是测试GPIO,常规点亮LED,板子来时就有1LED闪烁,就直接想用驱显LCD进行试验。

网上搜到STM32G431RB-NUCLEO的实例2个:

G4PMSM24V200W1024NENC

STM32Cube_FW_G4_V1.0.0

前者按照芯片功能逐一实验,后者好像采用RTOS实现的功能,本试验先采用前者,之后在测试前者。

实验平台:Windows 7 64位旗舰版,开发平台Keil5.23/25,工程STM32Cube_FW_G4_V1.0.0

查看Nucleo引脚图和main.h文档,GPIOA 02~47~1113~15已被占用,B 018占用,C 014513占用,驱显采用BC口,距离较近的B12131415正好用于6线串口屏,手中这类屏较多,0713690312864OLED等一堆,顺手拿了6903这款日本早年出的lcd,改造后带背光,3V3下电流1mA不到。

打开main.c文档static void MX_GPIO_Init(void)函数,可以知道

ABCFIO口时钟已打开

__HAL_RCC_GPIOC_CLK_ENABLE();

__HAL_RCC_GPIOF_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

参照/*ConfigureGPIO pin : Start_Stop_Pin */口的定义将LCD4根数据蔻斯能够以如下:

//LCD PIN

GPIO_InitStruct.Pin = LCDRES;//,LCDREG,LCDCLK,LCDDIN;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(LCDPORT, &GPIO_InitStruct);

      

GPIO_InitStruct.Pin = LCDREG;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(LCDPORT, &GPIO_InitStruct);

      

GPIO_InitStruct.Pin = LCDCLK;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(LCDPORT, &GPIO_InitStruct);

      

GPIO_InitStruct.Pin = LCDDIN;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(LCDPORT, &GPIO_InitStruct);

添加到此函数中。

main.h函数中增加定义:

#define LCDRES GPIO_PIN_12

#define LCDDIN GPIO_PIN_13

#define LCDREG GPIO_PIN_14

#define LCDCLK GPIO_PIN_15

#define LCDPORT GPIOB


以下是6903.h函数代码:

extern int k;

//6903 102X64LCD

const unsigned char asc2[][6]={//8x6 Dots0-40

{0x00,0x3E,0x45,0x49,0x51,0x3E},//0

{0x00,0x00,0x21,0x7F,0x01,0x00},//1

{0x00,0x31,0x43,0x45,0x49,0x31},//2

{0x00,0x22,0x49,0x49,0x49,0x36},//3

{0x00,0x04,0x0C,0x14,0x7F,0x04},//4

{0x00,0x72,0x51,0x51,0x51,0x4E},//5-5

{0x00,0x3E,0x49,0x49,0x49,0x06},//6

{0x00,0x40,0x43,0x4C,0x50,0x60},//7

{0x00,0x36,0x49,0x49,0x49,0x36},//8

{0x00,0x30,0x48,0x48,0x48,0x3F},//9

{0x00,0x1F,0x24,0x64,0x24,0x1F},//A-10

{0x00,0x41,0x7F,0x49,0x49,0x36},//B

{0x00,0x3E,0x41,0x41,0x41,0x22},//C

{0x00,0x41,0x7F,0x41,0x41,0x3E},//D

{0x00,0x41,0x7F,0x49,0x49,0x63},//E

{0x00,0x41,0x7F,0x49,0x5C,0x60},//F-15

{0x00,0x3E,0x41,0x45,0x47,0x24},//G

{0x41,0x7F,0x08,0x08,0x08,0x7F},//H

{0x00,0x00,0x41,0x7F,0x41,0x00},//I

{0x00,0x42,0x41,0x7F,0x40,0x40},//J

{0x00,0x41,0x7F,0x59,0x24,0x43},//K-20

{0x00,0x40,0x7F,0x41,0x01,0x03},//L

{0x00,0x7F,0x20,0x1E,0x20,0x7F},//M

{0x00,0x7F,0x30,0x18,0x06,0x7F},//N

{0x00,0x3E,0x41,0x41,0x41,0x3E},//O

{0x00,0x41,0x7F,0x49,0x48,0x30},//P-25

{0x00,0x3E,0x41,0x47,0x42,0x3D},//Q

{0x00,0x41,0x7F,0x49,0x4C,0x33},//R

{0x00,0x32,0x49,0x49,0x49,0x26},//S

{0x00,0x60,0x41,0x7F,0x41,0x60},//T

{0x00,0x7E,0x01,0x01,0x01,0x7E},//U-30

{0x00,0x7C,0x02,0x01,0x02,0x7C},//V

{0x00,0x7C,0x03,0x3C,0x03,0x7C},//W

{0x00,0x43,0x24,0x18,0x24,0x43},//X

{0x00,0x60,0x18,0x07,0x18,0x60},//Y

{0x00,0x63,0x45,0x49,0x51,0x63},//Z-35

{0x00,0x00,0x00,0x01,0x00,0x00},//.

{0x00,0x14,0x14,0x14,0x14,0x14},//=

{0x00,0x08,0x08,0x3E,0x08,0x08},//+

{0x00,0x08,0x08,0x08,0x08,0x08},//-

{0x00,0x00,0x00,0x24,0x00,0x00},//:-40

};

const unsigned char hanzi[][12]={//--16X12 汉字点阵码

{0x44,0x44,0x7F,0x44,0x08,0x48,0x4F,0x48,0x4F,0x48,0x08,0x00},//

{0x20,0x20,0xC0,0x40,0x10,0x60,0x80,0x00,0xE0,0x10,0x70,0x00},

{0x00,0xFF,0x84,0xA4,0xA7,0xA4,0xA7,0xA4,0x84,0x80,0xFF,0x00},//

{0x00,0xF0,0x50,0x90,0x10,0x10,0x90,0x50,0xD0,0x10,0xF0,0x00},

{0x08,0x08,0xFF,0x08,0x04,0x3F,0x08,0xFF,0x10,0x21,0x3F,0x00},//

{0x20,0x20,0xC0,0x40,0x00,0xE0,0x10,0x90,0x10,0x10,0x70,0x00},

{0x00,0x3E,0xAA,0x6A,0x2A,0x3F,0x2A,0x6A,0xAA,0x3E,0x00,0x00},//

{0x80,0x80,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,0x80,0x80,0x00},

{0x00,0x00,0x7F,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x08,0x00},//

{0x10,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00},

{0x11,0x16,0xFF,0x14,0x02,0x7F,0x40,0x40,0x7F,0x00,0x00,0x00},//

{0x00,0x00,0xF0,0x10,0x20,0xC0,0x00,0x00,0xE0,0x10,0x70,0x00},

{0x3F,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0x3F,0x00,0x00,0x00},//

{0xC0,0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x10,0x70,0x00},

{0x00,0x7F,0x40,0x42,0x42,0x42,0x5F,0x42,0x42,0x42,0x40,0x00},//

{0x10,0xE0,0x10,0x10,0x10,0x10,0xF0,0x10,0x90,0x50,0x10,0x00},

{0x44,0x22,0x00,0x24,0x2D,0x34,0xA5,0x64,0x25,0x2C,0x26,0x00},//

{0x20,0x40,0x10,0x20,0xC0,0x00,0xF0,0x00,0xE0,0x10,0x70,0x00},

{0x88,0x4F,0x00,0x5E,0x52,0x53,0xFF,0x53,0x52,0x5E,0x40,0x00},//

{0x10,0xE0,0x10,0x50,0x90,0x10,0xF0,0x10,0x90,0x50,0x10,0x00},

{0x00,0x7F,0x50,0x51,0x7D,0x55,0xD5,0x55,0x7D,0x51,0x50,0x00},//

{0x10,0xE0,0x00,0x10,0x90,0x50,0x20,0x20,0x50,0x90,0x10,0x00},

{0x00,0x79,0x48,0x4F,0x79,0x00,0x7F,0x48,0x48,0x48,0x4F,0x00},//

{0x10,0xF0,0x10,0xE0,0x20,0x00,0xF0,0x90,0x90,0x90,0x90,0x00},

{0x41,0x5D,0x45,0x6D,0x55,0xD7,0x55,0x6D,0x45,0x5D,0x41,0x00},//

{0xF0,0x00,0x20,0x60,0xA0,0x20,0x60,0x30,0x00,0x10,0xF0,0x00},

{0x10,0x2F,0xCA,0x4A,0x4A,0x4F,0x5A,0x6A,0x0A,0x0F,0x00,0x00},//

{0x10,0xE0,0x80,0x80,0x80,0xE0,0x80,0x80,0x90,0xF0,0x00,0x00},

{0x20,0x26,0x2A,0x32,0xE2,0x2F,0x22,0x22,0x22,0x22,0x20,0x00},//

{0x20,0x40,0x80,0x00,0x10,0xF0,0x00,0x00,0x80,0x40,0x20,0x00},

{0x80,0x9F,0x90,0x91,0xFE,0x90,0xFE,0x91,0x91,0x9F,0x80,0x00},//西

{0x00,0xF0,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0xF0,0x00,0x00},

{0x40,0x5F,0x50,0x5A,0x56,0xF3,0x56,0x5A,0x50,0x5F,0x40,0x00},//

{0x00,0xF0,0x80,0x80,0x80,0xE0,0x80,0x90,0x90,0xF0,0x00,0x00},

{0x08,0x08,0x08,0xFF,0x00,0x00,0xFF,0x04,0x08,0x10,0x20,0x00},//

{0x40,0x40,0x80,0xF0,0x00,0x00,0xE0,0x10,0x10,0x10,0x70,0x00},

{0x08,0x48,0x28,0x19,0x0A,0xFF,0x0A,0x19,0x28,0x48,0x08,0x00},//

{0x40,0x40,0x80,0x00,0x00,0xF0,0x00,0x00,0x80,0x40,0x40,0x00},

{0x00,0x7F,0x40,0x5F,0x55,0x55,0x5F,0x55,0x55,0x5F,0x40,0x00},//

{0x10,0xE0,0x10,0x50,0x50,0x50,0xF0,0x50,0x50,0x50,0x10,0x00},

{0x46,0x44,0x5D,0x55,0x55,0xD5,0x56,0x56,0x5C,0x44,0x46,0x00},//

{0x00,0x10,0x50,0x50,0x50,0xE0,0xB0,0xB0,0x90,0x10,0x30,0x00},

{0x7F,0x44,0x44,0x7F,0x00,0x10,0x12,0x11,0x10,0xFF,0x10,0x00},//

{0xE0,0x40,0x40,0xE0,0x00,0x00,0x00,0x90,0x10,0xF0,0x00,0x00},

{0x04,0x08,0x34,0xC4,0x07,0x04,0x04,0xC4,0x37,0x08,0x04,0x00},//

{0x00,0x10,0x20,0xC0,0x00,0x10,0x10,0x10,0xE0,0x00,0x00,0x00},

{0x48,0x4B,0x7F,0x89,0x02,0x1C,0x00,0xFF,0x00,0x20,0x1D,0x00},//

{0x80,0x00,0xF0,0x00,0x10,0x10,0x20,0x20,0x40,0x80,0x00,0x00},

{0x41,0x41,0x5D,0x55,0x55,0xD5,0x55,0x55,0x5D,0x41,0x41,0x00},//

{0xF0,0x00,0x00,0x70,0x50,0x50,0x50,0x70,0x00,0x10,0xF0,0x00},

{0x04,0x08,0x3F,0xC0,0x7F,0x44,0x44,0x7F,0x84,0x84,0x04,0x00},//

{0x00,0x00,0xF0,0x00,0xE0,0x40,0xA0,0x10,0xC0,0x20,0xF0,0x00},

{0x00,0x08,0x7B,0x08,0xFF,0x48,0x49,0x9F,0xB0,0xD7,0x90,0x9F},//

{0x00,0x90,0x10,0x20,0x40,0x80,0x00,0x90,0x20,0xC0,0x20,0x90},

{0x00,0x40,0x51,0x4A,0x59,0x6B,0xCD,0x4B,0x51,0x4A,0x51,0x40},//

{0x00,0x40,0x40,0x40,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x40},

{0x00,0x44,0x22,0x7F,0x40,0x5F,0x40,0x7F,0x00,0x3F,0x00,0xFF},//

{0x00,0x20,0x40,0x90,0x20,0xC0,0x20,0x90,0x00,0x80,0x10,0xF0},

{0x00,0x10,0xFF,0x95,0x95,0x95,0xDF,0xB5,0x95,0x95,0xFF,0x10},//

{0x00,0x10,0x50,0x50,0x50,0x50,0xF0,0x50,0x50,0x50,0x50,0x10},

};


//Write Plus

void wri(void){

HAL_GPIO_WritePin(GPIOB,LCDCLK,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB,LCDCLK,GPIO_PIN_SET);

}

//a byte data to lcd||dt=data reg=command

void b2l(unsigned char dt,unsigned charcom){

unsigned char i;

if(com)HAL_GPIO_WritePin(GPIOB,LCDREG,GPIO_PIN_SET);elseHAL_GPIO_WritePin(GPIOB,LCDREG,GPIO_PIN_RESET);;

for(i=0;i<8;i++){

if(dt&0x80){HAL_GPIO_WritePin(GPIOB,LCDDIN,GPIO_PIN_SET);}else{HAL_GPIO_WritePin(GPIOB,LCDDIN,GPIO_PIN_RESET);};

dt=dt<<1;

wri();

}

}

//Set display X,Y

void setXY(unsigned char X,unsigned charY){

b2l(0x40+Y,0);//column

b2l(0x80+X,0);//row

}

//LCD Clear

void lcdClear(void){

unsigned char t,k;

setXY(0,0);

for(t=0;t<9;t++){for(k=0;k<102;k++){b2l(0x00,1);}}

}

//Display ASCII

void c2l(unsigned char x,unsigned chary,unsigned char c){

unsigned char line;

setXY(x*6,y);   

for(line=0;line<6;line++)b2l(asc2[c][line],1);

}

//Display Hanzi

void h2l(unsigned char row,unsigned charpage,unsigned char c){

unsigned char i;

setXY(row*6,page);

for(i=0;i<12;i++){b2l(hanzi[c*2],1);}

setXY(row*6,page+1);

for(i=12;i<24;i++){b2l(hanzi[c*2],1);}  

}

//Initial 6903 LCD model

void lcdInit(void){

HAL_GPIO_WritePin(GPIOB,LCDRES,GPIO_PIN_RESET);

HAL_Delay(10);

HAL_GPIO_WritePin(GPIOB,LCDRES,GPIO_PIN_SET);

HAL_Delay(10);

b2l(0x25,0);//00100 PD=1dcOn|=0DcoffV=0Up|=1Left H==1

HAL_Delay(1);

b2l(0x15,0);//plus=L000~111=1/6-1/7-1/8-1/9//14=1/7

HAL_Delay(1);

b2l(0x9C,0);//Set VOP

HAL_Delay(1);

b2l(0x20,0);//PD=0,V=2,H=0

//Test LCD

//b2l(0x09,0);//08+/09=All Black/08=AllWrite/0C=Noamal/0D=Invert

//wait(1.0f);

b2l(0x0C,0);//LCD Set Final

HAL_Delay(10);

}

//Display ASCII Test

void dispAsc(void){

inti,j,k=0;

for(i=0;i<8;i++){

for(j=0;j<17;j++){

  c2l(j,i,k);

  if(k>39){k=0;}else{k++;}

  }

}

}

//Display Hanzi Test

void dispHz(void){

inti,j,k=0;

for(i=0;i<8;i+=2){

for(j=0;j<16;j+=2){

  h2l(j,i,k);

  if(k>28){k=0;}else{k++;}

  }

}

}

//END Files//

将以前在其他芯片上通过的6903驱显代码修改一下,include到主函数前部:

#include "6903.h"

之后添加整形定义:

int k=0;

再在main.c中的main主函数中添加:

lcdInit();

lcdClear();

while循环体重添加:

dispAsc();

HAL_Delay(1500);

lcdClear();

dispHz();

HAL_Delay(1500);

lcdClear();

编译下载后的结果见照片1-21-3

至此GPIO测试完成。如果想让板载LED也亮(接在GPIOAA_5口上),则可以在main.h中加入:

#define LED GPIO_PIN_5

#define LEDPORT GPIOA

main.cstatic void MX_GPIO_Init(void)函数中加入:

//LED PIN

GPIO_InitStruct.Pin = LED;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(LEDPORT, &GPIO_InitStruct);

在循环体中加入:

HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);

编译下载即可,LCD驱显二圈,LED闪亮一次。


下边将采用ST公司极力推荐的用创建工程工具STM32CubeMX来开始自己创建工程实现目标。本例采用驱动芯片的某些功能的方法进行测试和实验

<STM32G431测试>二、搭建实验平台

实验平台:

PC:联想商务一体机,3I3酷睿芯片,2G ram2T硬盘,自己加装了SSD硬盘作为系统盘,系统是Windows 7 旗舰,64位企业版。

从网上搜下载了STM32CubeMX_v5-3-0.rar,顺利安装在计算机中,这样计算机中有4.234.505.30三个版本,尽管向下兼容,还是留着将来看看他们的区别吧。

在创建工程是,MX要求联网下载ATM32G系列的设备文件,这个过程稍长了一点,但很快就完成了。

本实例创建的工程为STM32G431,可以同时生成KeilIAR的工程文档,由于在IAR官网找不到STM32G431RB的设备驱动文件,只好在Keil中开发。本机安装有Keil5.23 5.25两个版本,都能正常运行。

Keil中需要安装Link V3版本的,网上搜了stsw-link004.zipstsw-link007.zipstsw-link009.zip,经过测试本机安装stsw-link007.zipKeil5.23Keil5.25均可正常编译和下载。

同时搜了两个工程文档包,做了实验一,点亮LCDLED

计划创建工程测试完成:3ADC2DAC4PWM信号、3~4路外部触发控制、1UART1I2C1路模拟串口驱显LCD(此实验已完成,本例拿来主义)。

具体创建过程遇到许多问题,最主要的是由于STM芯片支持正交网络开关变换GPIO引脚的功能,带来方便的同时也带来初始设置时的管脚冲突,上述模块在GPIO口的应用中检查设置了这个产生冲突,再重新变换引脚,最后测试缩减为:

ADC1IN8一路ADC测试,PC_2

TIM6中断触发DAC1的两路输出,PA_4PA_5输出,其中正好与板上的LED连接驱显亮暗

TIM2的通道4输出一路PWM信号,TIM3的通道4输出一路PWM信号,一共两路PWM输出(实际上4路也没有问题,已经过实测)

1I2C,由I2C3实现

两路UART,一路LPUART、一路USART3,都可以正常收发

设置了Systick,以实现由此时钟控制操作,本例实现程序计数器的功能

所有模块都已实现,除了ADC采用TIM15外部触发启动ADC工作,所有的模块都采用DMA和中断自动运行过程。

由于工程设置是一次完成,逐项测试的,所以只能将成功的设置截图显示,并且结果对应照片显示。


       
          

ADC1TIM15的设置见截图2_01~2_08,由于设置界面过多只截取首个。


       
          

2_01

2_02


       
          

2_03


       
          

2_04

2_05


       
          

2_06


       
          

2_07

2_08


       
          

DAC1TIM6的设置见截图2_09~2_15,截图同理。

2_09


       
          

2_10

2_11


       
          

2_12


       
          

2_13

2_14


       
          

2_15


       
          

PWM1,与PWM2之事两个不同时钟,设置基本类似,截一个的设置图,见截图2_16~2_19


       
          

2_16

2_17


       
          

2_18

2_19


       
          

I2C3的设置除了Paramenter Setting之外,其他的设置都基本相同,勾选NVIC SettingDMA、定义GPIO口标名,见截图2_20。以下的除了特殊的都大同小异,免截图了。

2_20


       
          

回到左栏的System Core,点Code Generation,将下边的所有勾选上,点NVIC,将所有除了系统默认的其他中断允许勾上,以便自动运行中断服务。在PreemptionPriority下边的中断号默认为0,可以按照需要重新划分等级,0~7级,0级最优先。本例全默认都为0级。见图2_21~2_22


       
          

2_21

2_22

2-1驱显LCD

因为与实验一一样此处不再嗷述,之事在4线模拟串口先事先定义GPIO口的名称分别为:LCDDATLCDREGLCDCLKLCDRES,这样改变任意模拟串口只需要改变硬件接线即可,代码不用更改。

2-2测试Systick

本例仅仅由Systick中断任务完成程序计数器增一的功能,显示在LCD中,由于速度较快,显示在第3位可以差不多看见。

由于以前的STM32CubeMX就有不能自动在stm32g4xx_it.c中生成开Systick中断句柄语句,所以必须手动加入,加在voidSysTick_Handler(void)函数中:

HAL_IncTick();//这句原有

HAL_SYSTICK_IRQHandler();//这句后加

这样在main前边加入采用回访中断的宏:

void HAL_SYSTICK_Callback(void){if(js>9999999)js=0;else js++;}

这样在主函数显示jsq变量就可以实现了。以下的所有LCD照片都可以看到JSQ的增加。

2-3测试PWM

本实例设置了两路PWM分别由Timer2的通道4Timer的通道4输出,可以改变tim.c中的如下语句实现PWM输出频率:

htim2.Init.Prescaler = 1000;//改变输出频率

htim2.Init.Period = 100;//改变脉宽周期

main函数中用如下语句启动PWM:

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);//PB_11

HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);//PB_1

自编一个函数改变PWM的脉宽,由循环语句调用:

void pwmTest(void){

if(pwm1<250)pwm1+=5;elsepwm1=1;TIM2->CCR4=pwm1;//PB_11

if(pwm2<120)pwm2+=2;elsepwm2=1;TIM3->CCR4=pwm2;//PB_1

}

TIMx——表示TimerCCRx表示输出通道,别错了!


                
        
      
  

不调用时的PWM波形见照片2_23;调用pwmTest()函数时的波形见照片2_24。尽管只是一路,另一路结果是一样的。

2_23                                                                           2_24

2-4测试DAC

本实例开通了一个DAC2个通道,可以输出两路DAC信号,设置中DAC1通道2用了三角形输出方式,所以得到的是锯齿波形,而DAC 通道1设置输出白噪声模式。

由于设置为DMA自动传输初始值,中断循环执行,设置代码在while循环体外,代码:

//Set & run DAC

HAL_TIM_Base_Start(&htim6);

HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t*)&Samples_In,5000,DAC_ALIGN_12B_R);

HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_2,(uint32_t*)&Samples_In,5000,DAC_ALIGN_12B_R);

结果是通道1输出的是一个1/2VDD高电平,不知何因。结果见照片2_25


       
          

2_25

而通道二连接在PA_5上正好是一只LED,设置为三角波(锯齿波)以便驱显LED


                
        
      
  

当设置DACMaximum Trianggle Amplitude4095——满幅值时出现跳变,见照片2_26,可以看到LED渐亮渐暗的过程。设置为其他的诸如20471023等就是一个非常好的三角波或锯齿波,LED不渐变了,见照片2_27。截图2_28是虚拟串口获得的数据,截图2_29是数据结果Excel处理成图形的结果。


                
        
      
  
       

2_26                                                                     2_27

2_28                                                                     _29

2-5测试GPIO事件中断响应

本案例设置了3Ext Int外部事件中断,有回调函数完成,因此代码写在main外边即可(本例为高电平触发,完成增一),代码:

//Test ExtIntrupter KEY

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){

  if(GPIO_Pin &K1_PB5_Pin){key[0]++;}//PB_5

  if(GPIO_Pin &K2_PB6_Pin){key[1]++;}//PB_6

  if(GPIO_Pin &K3_PC7_Pin){key[2]++;}//PC_7

}


                      
        
      
      
  

Zhaopian 2_30~2_32是采用尖镊子利用人体感应信号分别触发PB5PB6PC7产生计数,照片中K=右边第1~3分别为PB5PB6PC7的计数值。

2_30                              2_31                              2_32

2-6 LPUART1USART3测试

这项测试也废了一些时间,还是容易实现的,本实例采用115200bpsDMA传输,中断自动循环。没有配置出来printf函数,只能用HAL库提供的语句:

HAL_UART_Transmit(&huart3,(uint8_t *)prtCode,10,100);

hauart3是从USART3输出到外部串口的RX,改成hlpuart1就可以从LPUART输出了。

比较麻烦的是这个代码只能输出16进制,为了能测试输出ADC采样,编写了一段代码进行转换成ASCII码,因为最大是4095,因为设置了超采样为81924位十进制就够了,函数:

void h2b(void){

prtCode[4]=(adcx[0]/1000)%10+0x30;

prtCode[5]=(adcx[0]/100)%10+0x30;

prtCode[6]=(adcx[0]/10)%10+0x30;

prtCode[7]=(adcx[0])%10+0x30;

}

前边定义的uint8_tprtCode[]={0x41,0x44,0x30,0x3D,0x30,0x30,0x30,0x30,0x0A,0x0D};

3个是AD0,第4=,最后两个是回车的ASCII代码,此函数改变从0算起的第4~7 为实际ADC的数值,因为设置了超采样1位,所以显示的最大数值是0~8191。结果见截图2_33

                                                                                                            2_33


       
          

当设置DAC2047时的波形为:Excel截图2_34,采样信号2_35


       
          

2_34

2_35

2-7 I2C3测试

I2C的测试比较简单,本实例省略了。

<STM32G431测试>三、总结

通过从采用STM32CubeMX创建工程开始,设计基本实验到初步调通每个基础实验的实现和在创建MX工程中的选设参数逐步明确了一些各一公共遵守的地方以便加快自己在新的芯片或开发板上实现预设功能。有以下几点需要注意:


       
          

3-1:由于GPIO复用,在设置新功能是会造成已设置的功能出现黄色覆盖,鼠标指向会出现状态提示,如图3_01,如果是IO冲突,必须模块IO改变或重新选设。

3——01

3-2 Interupt的开通是需要先将模块的NVIC选设了,最后再在SystemCore中逐一勾选。

3-3 GPIO最好命名,可以在每个功能模块设置中命名,也可以在最后在System Core中逐一命名。

3-4 DMAmoren shi Normal,通常设置为循环。

3-5 系统时钟树的设置不复杂,只要选好系统时钟,在右边的时钟树输出到模块满足各个模块的最高工作频率以内即可。


       
          

3-6最后输出工程时,首次必须在Project Manager/Code Generator正确选择,如图3_02

3_02

当然实际设置遇到的问题远比这多,需要仔细斟酌选设,可以用不同的参数设置后生成工程代码运行检测找出最佳的。最后一点,检查到相关的网站学习获得帮助和提高积累经验非常重要。
由于是从Word文档中拷贝过来的,发现图对不上,只能参考吧.如果在玩这些有问题可以互相讨论学习,谢谢.
收藏 评论7 发布时间:2019-11-13 15:25

举报

7个回答
zhjb1 回答时间:2019-11-13 15:26:55
怎么图片都没有了?!
STMCU 回答时间:2019-11-14 08:33:44
zhjb1 发表于 2019-11-13 15:26
怎么图片都没有了?!

你上传成功了么
STMCU 回答时间:2019-11-14 08:34:18
图片需要添加上去,直接复制肯定会有问题的
混森蓝兽 回答时间:2019-11-14 09:47:28
看不懂      
yklstudent-1794 回答时间:2019-11-14 13:40:10
mark,关注
ldptest 回答时间:2019-11-14 14:36:09
看不见图片
zhjb1 回答时间:2019-11-14 19:40:56
抽空弄上去

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版