STM32 HELLO,WORLD(点亮LED)
1:环境
STM32CUBE IDE 用这个图省事(keil5也不错)
STM32F103C8T6 64KFLASH 最小核心板(10块左右)
ST-LINKV2 (5块左右) 也可以选择 JLINK(比较贵,不推荐) 安装驱动就好
STM32 ST-LINK Utility 烧录工具(单独可以BIN HEX 烧录到flash中)–可以不安装
2:创建项目
1>选择微控制器/微处理器 这里 F103C8T6(微控制器)
2>特色,结构图,文档,手册等
3>选择具体型号 ,这里有2中,还有 C8T6TR
2:配置项目 (A-Z) PINOUT&CONFIGURATION
RCC 时钟设置 选择Crystal/Ceramic Resonator 精确度高,所以选择它
在用cube配置时钟时,有下面三个选项
Disable(禁用)
BYPASS Clock Source(旁路时钟源)
Crystal/Ceramic Resonator(晶体/陶瓷晶振)
SYS 调试模式 因为用的是ST-LINK 所以选择 Serial Wire
看手册
Serial Wire模式下需要PA13和PA14这2个引脚
JTAG(4 pins)模式下需要PB3,PA13,PA14,PA15这4个引脚
JTAG(5 pins)模式下需要PB3,PB4,PA13,PA14,PA15这5个引脚
Trace Asynchronous SW模式下需要PB3,PA13,PA14这3个引脚
F103C8T6 只需要接 SWCLK SWDIO GND 3.3
根据C8t6的四个口,一一对应即可 (网上一堆,这里直接跳过)
时钟 这里暂时先用 Systick(系统的) TIM1-TIME4 后面有时间再说
GPIO
先看电路图
设置 PC13 位 GPIO_ouput 通用输出
GPIO(General Purpose Input/Output)
配置参数 (可以参考中文手册)
1)GPIO output level:只有当引脚设置为“GPIO output”时才需要设置
High:GPIO输出初始化为高电平
Low:GPIO输出初始化为低电平
2)GPIO mode
Output Push Pull:推挽输出,能输出高低电平,且高低电平都有驱动能力。以PC13引脚为例,若需要通过其控制LED灯,则该引脚应配置为“Output Push Pull”模式,对应标准库函数中的“GPIO_Mode_Out_PP”
Output Open Drain:开漏输出,只能输出低电平,需要借助外部上拉电阻才能输出高电平,对应标准库函数中的“GPIO_Mode_Out_OD”
Analog mode:模拟输入,ADC采样信号输入引脚的配置模式,对应标准库函数中的“GPIO_Mode_AIN”
Alternate Function Push Pull:推挽式复用功能,对应标准库函数中的“GPIO_Mode_AF_PP”
Input mode:输入模式,配合No pull-up/pull-down可形成GPIO_Mpde_IN_FLOATING、GPIO_Mode_IPD、GPIO_Mode_IPU等不同工作模式
3)GPIO Pull-up/Pul-down
No pull-up/pull-down:无内部上拉或下拉
Pull-up:内部上拉
Pull-down:内部下拉
4)Maximum output speed
Low:低速,对应标准库函数中的“GPIO_Speed_2MHz”
Medium:中速,对应标准库函数中的“GPIO_Speed_10MHz”
High:高速,对应标准库函数中的“GPIO_Speed_50MHz”
5)User Label:用户标签,可以按照需要给引脚命名
3: CLOCK Configuration
72MHZ sysclock 也配置为 72MHZ
4:Project manager
勾选 每个外设初始化时 产生 一对 C/H 文件,为了方便理解
5:tools
估下功耗
保存,进入编码模式
6:code
void Delay_ms(uint32_t xus){
uint32_t temp;
//RCC_CLOCKTYPE_SYSCLK
//SysTick->LOAD = 72000000/1000*xus;
// uint32_t ms = 72000000/1000 ;
//系统时钟为 72MHZ(看 CLOCK Configuration) 就是
//1秒 = 72 000 000
//1ms = 72000 000 /1000 =72000
//1us = 72000 /1000 = 72
SysTick->LOAD = 72000*xus-1;//72000000/1000/72*xus-1;
SysTick->VAL=0X00;//清空计数�??
SysTick->CTRL=SysTick_CTRL_ENABLE_Msk ;//0X01;//使能,减到零是无动作,采用外部时钟源
// SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
do
{
temp=SysTick->CTRL;//读取当前倒计数�??
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
SysTick->CTRL=0x00; //关闭计数�??
SysTick->VAL =0X00; //清空计数�??
}
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);//GPIO_PIN_RESET 、、点亮
Delay_ms(1000);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);//GPIO_PIN_SET 、、灭
Delay_ms(1000*5);
位置如下:
7:测试运行
注意
ELF 太大,Flash 才64K ,所以最好转为bin/HEX 这样方便调好的程序可以单独烧录到小flash中,
烧录工具
8:如果觉得有用 请点个赞 加个收藏
后续继续讲使用OLED屏 调用温度计
先把DEMO工程