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

查看: 5516|回复: 11

【ST学习小组】+STM32学习技术小组

[复制链接]

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-6-9 07:13:55 | 显示全部楼层 |阅读模式
  学习主题:STM32F0/F4学习和探索
   小组宣言:让菜鸟都成为STM32的高手!
  学习计划:本周新品资料下载和分享、F0探索套件申请

                    第二周——F0/F4/F1系列产品产皮分析,开始菜鸟的学习内容
                   

                    第三周——学习笔记发表和分享
                    第四周——开始STM32系列的DIY创意分享  
菜鸟学习内容:
    1.  利用4个LED实现流水灯.学习GPIO的输出控制功能.
    2.  利用按键KEY3和KEY4分别控制LED1,2和LED3,4的亮灭,采用扫描方法.学习GPIO的输入功能.
    3.  利用按键KEY3和KEY4分别控制LED1,2和LED3,4的亮灭,采用中断方法.学习外部中断功能.
    4.  利用LCD数码显示屏显示从1自加到9999,步进值根据数字位数不同分别为1,10,100,1000.练习GPIO控制功能,熟悉LCD的编程方法.
    5.  利用五维摇杆控制LCD显示数字1-5.练习GPIO的输入/输出控制功能.
    6.  利用五维摇杆和LCD屏实现秒表功能.学习定时器的使用.
    7.  利用PWM控制LED的亮度变化.学习定时器的PWM功能.
    8.  上位机通过UART1控制LCD屏显示数字.学习UART的数据接收功能.
    9.  上位机通过UART1和学习板实现简单的问答功能.学习UART的数据发送功能.
    10. 利用电位器控制LCD屏显示不同电压.学习ADC功能使用.
    11. 采用I2C的24C02读写实验.学习I2C功能.
    12. SD卡读写实验.学习SPI功能.
    13. USB简单通讯实验.学习USB功能.

 
 
             小组现有成员:luweitang

             队员在招人数:10

             招募条件——有愿意在STM32上努力精神!

 

------------------------任务完成——————————————————————————

STM32F051系列数据手册简介(中文).pdf

下载

3.5 MB, 下载次数: 9, 下载积分: ST金币 -1

STM32F4中文资料.rar

下载

3.47 MB, 下载次数: 9, 下载积分: ST金币 -1

LCD显示.txt

下载

2.42 KB, 下载次数: 7, 下载积分: ST金币 -1

I2C读写部分程序.txt

下载

1.6 KB, 下载次数: 8, 下载积分: ST金币 -1

串行通信.txt

下载

6.28 KB, 下载次数: 2, 下载积分: ST金币 -1

流水灯程序.txt

下载

2.54 KB, 下载次数: 4, 下载积分: ST金币 -1

i2c_程序.rar

下载

4.81 KB, 下载次数: 5, 下载积分: ST金币 -1

流水灯-程序.rar

下载

1.06 KB, 下载次数: 2, 下载积分: ST金币 -1

按钮控制流水灯的程序.txt

下载

3.8 KB, 下载次数: 2, 下载积分: ST金币 -1

利用STM官方网站的函数实现USB转串口.txt

下载

5.64 KB, 下载次数: 6, 下载积分: ST金币 -1

三角波关键代码.txt

下载

1008 Bytes, 下载次数: 3, 下载积分: ST金币 -1

STM32-USB开发.pdf

下载

143.59 KB, 下载次数: 7, 下载积分: ST金币 -1

正弦破的代码.txt

下载

1.72 KB, 下载次数: 3, 下载积分: ST金币 -1

串口转CAN-发送程序.txt

下载

4.83 KB, 下载次数: 2, 下载积分: ST金币 -1

串口转CAN-接收程序.txt

下载

6.04 KB, 下载次数: 2, 下载积分: ST金币 -1

STM32的can总线实验心得.txt

下载

11.42 KB, 下载次数: 2, 下载积分: ST金币 -1

回复

使用道具 举报

89

主题

485

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2012-6-14 14:19:52 | 显示全部楼层

回复:【ST学习小组】+STM32学习技术小组

加油,赶快招募到队员呐!!!
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-17 07:43:20 | 显示全部楼层

RE:【ST学习小组】+STM32学习技术小组

【ST学习小组】STM32学习技术小组(6月17号更新)
这是我用先前活动搞到的开发板STM32F103。
 
SD-PCB图:
3D-pcb图.jpg
 
系统原理图:
系统原理图.jpg
 
系统框图:
系统框图.jpg
还有STM32F103的中文资料。
 

stm32f103x中文资料.pdf

下载

3.88 MB, 下载次数: 4, 下载积分: ST金币 -1

回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-17 07:49:26 | 显示全部楼层

RE:【ST学习小组】+STM32学习技术小组

流水灯代码:简单GPIO应用,发现各种模式都适用流水灯.这是部分的代码!

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);
GPIO_InitStruct.GPIO_Pin=MY_LED_ALL;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
//GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(MY_LED_GPIOE , &GPIO_InitStruct);
case 0:
//MY_LED_GPIOE->BRR=LED1;
//MY_LED_GPIOE->BSRR=LED4;
GPIO_SetBits(MY_LED_GPIOE,MY_LED_ALL);
GPIO_ResetBits(MY_LED_GPIOE,LED1);
break;
case 1:
//MY_LED_GPIOE->BRR=LED2;
//MY_LED_GPIOE->BSRR=LED1;
GPIO_SetBits(MY_LED_GPIOE,LED1);
GPIO_ResetBits(MY_LED_GPIOE,LED2);
break;
case 2:
//MY_LED_GPIOE->BRR=LED3;
//MY_LED_GPIOE->BSRR=LED2;
GPIO_SetBits(MY_LED_GPIOE,LED2);
GPIO_ResetBits(MY_LED_GPIOE,LED3);
break;
case 3:
//MY_LED_GPIOE->BRR=LED4;
//MY_LED_GPIOE->BSRR=LED3;
GPIO_SetBits(MY_LED_GPIOE,LED3);
GPIO_ResetBits(MY_LED_GPIOE,LED4);
break;
case 4:
GPIO_SetBits(MY_LED_GPIOE,LED4);
//GPIO_ResetBits(MY_LED_GPIOE,LED3);
break;
case 5:
//GPIO_SetBits(MY_LED_GPIOE,LED2);
GPIO_ResetBits(MY_LED_GPIOE,LED4);
break;
case 6:
GPIO_SetBits(MY_LED_GPIOE,LED4);
GPIO_ResetBits(MY_LED_GPIOE,LED3);
break;
case 7:
GPIO_SetBits(MY_LED_GPIOE,LED3);
GPIO_ResetBits(MY_LED_GPIOE,LED2);
break;
case 8:
 
加多一个图片吧 8a514af3719bfbb6d22e027ee5d7df5a.jpg
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-18 22:22:44 | 显示全部楼层

RE:【ST学习小组】+STM32学习技术小组

这是另一个流水灯的程序
————————————LED.c-----------------------------
#include "stm32f10x_it.h"
#include "LED.h"
void        LED_Init(Led_TypeDef led)
{
        GPIO_InitTypeDef        GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);
        GPIO_InitStructure.GPIO_Pin        =                led;
        GPIO_InitStructure.GPIO_Mode        =        GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed        =        GPIO_Speed_50MHz;
        GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure);
}
void        LED_Set(Led_TypeDef led, Led_SettingDef set)
{
        if(set==ON)
                GPIOE->BRR        =        led;
        else
                GPIOE->BSRR        =        led;
}
void        LED_Toggle(Led_TypeDef led)
{
        GPIOE->ODR ^= led;
}
-----------------LED.h--------------------------
#ifndef __LED_H
#define __LED_H
#define        LED_ALL        (GPIO_Pin_2 | GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5)
#define        LED_GPIO_PORT        GPIOE
#define        LED_GPIO_CLK        RCC_APB2Periph_GPIOE
typedef enum
{
        ON        =        1,
        OFF        =        0
}Led_SettingDef;
typedef enum
{
        LED1        =        GPIO_Pin_2,
        LED2        =        GPIO_Pin_3,
        LED3        =        GPIO_Pin_4,
        LED4        =        GPIO_Pin_5,
        ALL_LED        =        (GPIO_Pin_2 | GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5)
}Led_TypeDef;
void        LED_Init(Led_TypeDef led);
void        LED_Set(Led_TypeDef led, Led_SettingDef set);
void        LED_Toggle(Led_TypeDef led);
#endif
----------------main.c-----------------------
#include "stm32f10x_conf.h"
#include "LED.h"
int main(void)
{
        Led_TypeDef led        =        ALL_LED;
        LED_Init(led);
        led        =        LED1;
        LED_Set(led,ON);
        LED_Set(led,OFF);
        led        =        LED2;
        LED_Set(led,ON);
       
        led        =        ALL_LED;
        LED_Toggle(led);
        LED_Toggle(led);
        LED_Set(led,OFF);
       
        led        =        LED3;
        LED_Set(led,ON);
        LED_Set(led,OFF);
       
        led        =        LED4;
        LED_Set(led,ON);
        LED_Set(led,OFF);
        led        =        ALL_LED;
        LED_Toggle(led);
        return 0;
}
效果图片都同上面一样。
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-19 22:06:34 | 显示全部楼层

RE:【ST学习小组】+STM32学习技术小组

今天采用I2C的24C02读写实验.学习I2C功能.
 
先发一个I2C的程序框图:
I2C-程序框图.png
还有I2C的原题图:
I2C-原理图.jpg
最后的是程序:
I2C读写部分程序.txt (1.6 KB, 下载次数: 1)
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-19 22:41:20 | 显示全部楼层

RE:【ST学习小组】+STM32学习技术小组

STM32读写EEPROM驱动,硬件I2C中断加DMA方式。
i2c_h_dma.txt (1.18 KB, 下载次数: 2)
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-20 19:01:25 | 显示全部楼层

回复:【ST学习小组】+STM32学习技术小组

今日学习LCD显示。
oid main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC
| RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG
| RCC_APB2Periph_AFIO , ENABLE);

/*------------------- Resources Initialization -----------------------------*/
/* GPIO Configuration */
GPIO_Config();
/* Initialize the LCD */
STM3210E_LCD_Init();
/*------------------- Drivers Initialization -------------------------------*/

LCD_Clear(Magenta);
LCD_SetTextColor(Blue);
LCD_SetBackColor(Magenta);
while(1)
{LCD_DisplayString(50, 50, "Hello");

LCD_DisplayString(50, 80, "A R M D I Y");

LCD_DisplayString(50, 100, "Happy every day");
}
}
除了这两个程序之外,还需要字符库文件(即Ascii16为首地址的数组),可直接调用上面网址中的fonts.H文件即可,
此程序只适合驱动芯片为SS1289的LCD。
LCD显示.txt (2.42 KB, 下载次数: 1)
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-22 06:27:58 | 显示全部楼层

RE:【ST学习小组】+STM32学习技术小组

实现串口一发送数据:
//Header:stm32f10x_conf.h
//FIle Name: main.c
//Author:
//Data:
#include "stm32f10x_conf.h"
#include "stm32f10x.h"
#include

int fputc(int ch, FILE *f);

void Uart1_PutChar(u8 ch);


/*************************************************
函数: void RCC_Configuration(void)
功能: 复位和时钟控制 配置
参数: 无
返回: 无
**************************************************/
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus; //定义外部高速晶体启动状态枚举变量
RCC_DeInit(); //复位RCC外部设备寄存器到默认值
RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速时钟准备好
if(HSEStartUpStatus == SUCCESS) //外部高速时钟已经准别好
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的用法.位置:RCC初始化子函数里面,时钟起振之后
FLASH_SetLatency(FLASH_Latency_2); //flash操作的延时

RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB(HCLK)时钟等于==SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)钟==AHB时钟
RCC_PCLK1Config(RCC_HCLK_Div2); //配置APB1(PCLK1)钟==AHB1/2时钟

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //配置PLL时钟 == 外部高速晶体时钟 * 9 = 72MHz
RCC_PLLCmd(ENABLE); //使能PLL时钟

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟就绪
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //配置系统时钟 = PLL时钟
while(RCC_GetSYSCLKSource() != 0x08) //检查PLL时钟是否作为系统时钟
{
}
}
}

/*******************************************************************************
函数名:USART1_Configuration
输 入:
输 出:
功能说明:
初始化串口硬件设备,启用中断
配置步骤:
(1)打开GPIO和USART1的时钟
(2)设置USART1两个管脚GPIO模式
(3)配置USART1数据格式、波特率等参数
(4)使能USART1接收中断功能
(5)最后使能USART1功能
*/
void USART1_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* 第1步:打开GPIO和USART部件的时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
/* 第2步:将USART Tx的GPIO配置为推挽复用模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 第3步:将USART Rx的GPIO配置为浮空输入模式
由于CPU复位后,GPIO缺省都是浮空输入模式,因此下面这个步骤不是必须的
但是,我还是建议加上便于阅读,并且防止其它地方修改了这个口线的设置参数
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* 第4步:配置USART1参数
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
/* 若接收数据寄存器满,则产生中断 */
// 这次没有用到 只负责发送
// USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* 第5步:使能 USART1, 配置完毕 */
USART_Cmd(USART1, ENABLE);
/* 如下语句解决第1个字节无法正确发送出去的问题 */
USART_ClearFlag(USART1, USART_FLAG_TC); // 清标志
}

int main(void)
{
RCC_Configuration();
// NVIC_Configuration();
USART1_Configuration();
printf("\n\rEEPW ARMDIY WW 串口1测试程序\n");
while(1)
{
}
return 1;
}

int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch); /*发送一个字符函数*/
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)/*等待发送完成*/
{

}
return ch;
}

void Uart1_PutChar(u8 ch)
{
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}

 
下一步准备实现串口的接收功能

 
STC-ISP下载.jpg
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-6-23 20:25:15 | 显示全部楼层

回复:【ST学习小组】+STM32学习技术小组

8a514af3719bfbb6d22e027ee5d7df5a.jpg
这是一个使用按钮控制流水灯的程序
程序以文件txt的形式发上来吧。
 

按钮控制流水灯的程序.txt

下载

3.8 KB, 下载次数: 0, 下载积分: ST金币 -1

回复 支持 反对

使用道具 举报

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