目录
一、实验目的
安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务:
1、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。
2、完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:
(1)设置波特率为115200,1位停止位,无校验位;
(2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。
二、寄存器实现点灯
1、项目创建
与上次实验基本相同
搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写_weixin_45203491的博客-CSDN博客
注意,出现此界面的时候
编辑
关闭此窗口即可
其中芯片的选择需要更换为STM32F103C8
2、编写代码
然后添加.c程序,并且写入以下代码
//--------------APB2???????------------------------
#define RCC_AP2ENR *((unsigned volatile int*)0x40021018)
//----------------GPIOA????? ------------------------
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
#define GPIOA_ORD *((unsigned volatile int*)0x4001080C)
//----------------GPIOB????? ------------------------
#define GPIOB_CRH *((unsigned volatile int*)0x40010C04)
#define GPIOB_ORD *((unsigned volatile int*)0x40010C0C)
//----------------GPIOC????? ------------------------
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
#define GPIOC_ORD *((unsigned volatile int*)0x4001100C)
//-------------------???????-----------------------
void Delay_wxc( volatile unsigned int t)
{
unsigned int i;
while(t--)
for (i=0;i<800;i++);
}
//------------------------???--------------------------
int main()
{
int j=100;
RCC_AP2ENR|=1<<2; //APB2-GPIOA??????
RCC_AP2ENR|=1<<3; //APB2-GPIOB??????
RCC_AP2ENR|=1<<4; //APB2-GPIOC??????
//????????? RCC_APB2ENR|=1<<3|1<<4;
GPIOA_CRL&=0x0FFFFFFF; //??? ??
GPIOA_CRL|=0x20000000; //PA7????
GPIOA_ORD|=1<<7; //???????
GPIOB_CRH&=0xFFFFFF0F; //??? ??
GPIOB_CRH|=0x00000020; //PB9????
GPIOB_ORD|=1<<9; //???????
GPIOC_CRH&=0x0FFFFFFF; //??? ??
GPIOC_CRH|=0x30000000; //PC15????
GPIOC_ORD|=0x1<<15; //???????
while(j)
{
GPIOA_ORD=0x0<<0; //PB0???
Delay_wxc(1000000);
GPIOA_ORD=0x1<<0; //PB0???
Delay_wxc(1000000);
GPIOB_ORD=0x0<<9; //PB9???
Delay_wxc(1000000);
GPIOB_ORD=0x1<<9; //PB9???
Delay_wxc(1000000);
GPIOC_ORD=0x0<<15; //PC15???
Delay_wxc(1000000);
GPIOC_ORD=0x1<<15; //PC15???
Delay_wxc(1000000);
}
}
注意在Options切换至Output界面
勾选生成hex文件
添加驱动文件
[
编辑
拷贝至工程目录下即可
3、烧录编译
打开mcuisp,上传工程中生成的hex文件
点击开始编程
编辑
4、观察GPIO端口的输出波形
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1.12s左右。
三、HAL库点亮LED流水灯
1、安装HAL库
安装好SMT32CubeMX后还需要安装一个固件库,因为我使用的芯片是STM32F103系列的,所以选择STM32F1版本进行安装。安装完后环境就搭建好了。
2、创建工程
点击New Project创建工程
选择这个,然后选择芯片点击Start Project