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

【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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版