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

【STM32F0开发评测】 初步了解开发板

[复制链接]
jinglixixi 提问时间:2013-12-12 11:22 /
开发板已经收到了,十分高兴.
首先关心的就是板子经过一路的颠簸还好吧.
小心地把板子从塑料壳中取出,可以发现探索套件想的得很周到,不但有开发板,还配置一块实验用的扩展板.
为了更好地了解和使用开发板,应从网上下载并打印一份开发板的原理图.然后了解板上器件的摆放位置和器件配制情况.经观察原理图上标注"Not Fitted"的器件是未焊接的,X2和X3的晶振是未加装的,在使用外部时钟和RTC时应自行加装和焊接.此外若使用串行通信功能,可为JP1加装上插针,以便同外部的串行通信模块进行连接.另外,发板上的插排选的也很好,可以从上下两个方向来进行扩展连接.
准备好一条miniA-B型USB线,就可用开发板上的预装程序进行测试了.先用USB线将电脑和开发板连接起来,此时可以观察到红色LD1被点亮,说明供电正常.此外LD2也显示为红色,说明STLINK处于高电平状态,否则会显示为绿色.在STM32F0的CPU侧,绿色的LD3正在不停的闪烁,说明STM32F0也正在运行着,且输出功能正常.此时按下USER键,则点亮兰色的LD4,说明输入功能也是正常的.通过USER键的触发,可进行测试方式的切换.至此开发板的初步测试和了解就告一段落了.
 
收藏 评论3 发布时间:2013-12-12 11:22

举报

3个回答
jinglixixi 回答时间:2014-2-21 12:48:07

【STM32F0开发日志】+数字逻辑芯片模拟与检测功能的实现

功能要求:
以四2输入与非门芯片74LS00为例,实现该芯片的功能模拟及质量检测。其它逻辑芯片仿此。
STM32F030的芯片引脚与74LS00引脚的对应关系如下:
PC0—1A  PC1—1B  PC2—2A  PC3—2B  PC4—3A  PC5—3B  PC6—4A  PC7—4B
PA0—1Y  PA1—2Y  PA2—3Y  PA3—4Y  
在功能模拟时,由PC口来读取外部信号的电平高低(通过开关手动设置信号),用PA口来模拟输出,并由LED发光二极管来指示输出状态,LED发光代表高电平,否则代表低电平。
在质量检测时,将芯片74LS00插入已连线的管座,由PC口来向74LS00提供测试信号,用PA口来读取74LS00的输出信号,从而按真值表判别出芯片的好坏,当绿灯(PB8—LED)亮时,表示正常;否则表示异常。
程序代码:
//  数字逻辑芯片模拟与检测程序之芯片模拟
#include "stm32f0xx.h"
#define BSRR_VAL        0x0300
GPIO_InitTypeDef        GPIO_InitStructure;
static uint8_t g_ubMultiple_us = 0;
static uint16_t g_uwMultiple_ms = 0;
//  系统时钟初始化函数
void Delay_Init(uint8_t sysclk)
{
        SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;
     // 选择Tick时钟源——系统时钟
        g_ubMultiple_us = sysclk;
        g_uwMultiple_ms = (uint16_t)sysclk * 1000;
}
// 毫秒延时函数
void Delay_ms(uint16_t time)
{
        uint32_t ulTemp = 0;
        SysTick->LOAD = (uint32_t)time * g_uwMultiple_ms;
           SysTick->VAL = 0;
    // 赋值可清除SysTick_CTRL_COUNTFLAG_Msk 位
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
    // 启动计时器
        do
        {
        ulTemp = SysTick->CTRL;
        }
        while((ulTemp & SysTick_CTRL_COUNTFLAG_Msk) != SysTick_CTRL_COUNTFLAG_Msk);
// 等到计数完成
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    // 停止计时器
        SysTick->VAL = 0;
}
//  按键扫描函数
uint8_t  PIN_X(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 )
{
return 0 ;
}
else
{
return 1;
}
}
//  主函数
main(void)
{
  Delay_Init(8);
  //  配置输入输出引脚
//  输出引脚
// 输入引脚
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);  // GPIOC时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |    /
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;       // 设置管脚为输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
//  输出引脚
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  // GPIOA时钟使能
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;       // 设置管脚为输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
  {
    if(PIN_X (GPIOC,GPIO_Pin_0)&& PIN_X (GPIOC,GPIO_Pin_1))
    {
GPIO_ResetBits(GPIOA,GPIO_Pin_0 );
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_0 );
}
if(PIN_X (GPIOC,GPIO_Pin_2)&& PIN_X (GPIOC,GPIO_Pin_3))
    {
GPIO_ResetBits(GPIOA,GPIO_Pin_1 );
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_1 );
}
if(PIN_X (GPIOC,GPIO_Pin_4)&& PIN_X (GPIOC,GPIO_Pin_5))
    {
GPIO_ResetBits(GPIOA,GPIO_Pin_2 );
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_2 );
}
if(PIN_X (GPIOC,GPIO_Pin_6)&& PIN_X (GPIOC,GPIO_Pin_7))
    {
GPIO_ResetBits(GPIOA,GPIO_Pin_3 );
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_3 );
}
}
}

//  数字逻辑芯片模拟与检测程序之芯片检测
#include "stm32f0xx.h"
#define BSRR_VAL        0x0300
GPIO_InitTypeDef        GPIO_InitStructure;
static uint8_t g_ubMultiple_us = 0;
static uint16_t g_uwMultiple_ms = 0;
//  系统时钟初始化函数
void Delay_Init(uint8_t sysclk)
{
        SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;
     // 选择Tick时钟源——系统时钟
        g_ubMultiple_us = sysclk;
        g_uwMultiple_ms = (uint16_t)sysclk * 1000;
}
// 毫秒延时函数
void Delay_ms(uint16_t time)
{
        uint32_t ulTemp = 0;
        SysTick->LOAD = (uint32_t)time * g_uwMultiple_ms;
           SysTick->VAL = 0;
    // 赋值可清除SysTick_CTRL_COUNTFLAG_Msk 位
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
    // 启动计时器
        do
        {
        ulTemp = SysTick->CTRL;
        }
        while((ulTemp & SysTick_CTRL_COUNTFLAG_Msk) != SysTick_CTRL_COUNTFLAG_Msk);
// 等到计数完成
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    // 停止计时器
        SysTick->VAL = 0;
}
//  按键扫描函数
uint8_t  PIN_X(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 )
{
return 0 ;
}
else
{
return 1;
}
}
//  主函数
main(void)
{
  Delay_Init(8);
  //  配置输入输出引脚
//  输出引脚
// 输入引脚
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  // GPIOC时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;       // 设置管脚为输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
//  输出引脚
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);  // GPIOA时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3| /
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;       // 设置管脚为输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);  // GPIOA时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;            // 设置管脚为输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_8 );
GPIO_ResetBits(GPIOC,GPIO_Pin_0 );
GPIO_ResetBits(GPIOC,GPIO_Pin_1 );
    if(PIN_X (GPIOA,GPIO_Pin_0)==0)
    {
goto ERR ;
}
GPIO_ResetBits(GPIOC,GPIO_Pin_2 );
GPIO_ResetBits(GPIOC,GPIO_Pin_3 );
    if(PIN_X (GPIOA,GPIO_Pin_1)==0)
    {
goto ERR ;
}
GPIO_ResetBits(GPIOC,GPIO_Pin_4 );
GPIO_ResetBits(GPIOC,GPIO_Pin_5 );
    if(PIN_X (GPIOA,GPIO_Pin_2)==0)
    {
goto ERR ;
}
GPIO_ResetBits(GPIOC,GPIO_Pin_6 );
GPIO_ResetBits(GPIOC,GPIO_Pin_7 );
    if(PIN_X (GPIOA,GPIO_Pin_3)==0)
    {
goto ERR ;
}
while (1);
ERR: GPIO_ResetBits(GPIOB,GPIO_Pin_8 );
    while (1);
}
沐紫 回答时间:2013-12-12 13:35:05

RE:【STM32F0开发评测】 初步了解开发板

板子完好!期待楼主进一步探究
 
已添加到社区网友原创汇总:
STM32F030探索套件开发日志,中文教程,使用问答70篇
jinglixixi 回答时间:2013-12-13 10:53:06

回复:【STM32F0开发评测】 初步了解开发板

回复第 2 楼 于2013-12-12 13:35:05发表:
板子完好!期待楼主进一步探究 

必须的,下一步是步入STM32F0编译与下载

所属标签

相似问题

官网相关资源

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