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

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