PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : شروع آموزش stm32 بر پایه برد سفارشی



صفحه ها : [1] 2 3 4 5

alishekarriz
02-02-2012, 13:56
سلام:hi:



قابل توجه کاربران :

لینک تمامی پست های مهم این تایپیک جهت استفاده شما عزیزان در زیر قرار داده شده ...




دانلود فایل ویزارد (You can see links before reply)
اولین برنامه (چشمک زن) با استفاده از ویزارد (You can see links before reply)
دانلود فایل های پروژه چشمک زن (You can see links before reply)
تشریح برنامه چشمک زن (You can see links before reply)
راه اندازی GPIO با کامپایلر IAR (You can see links before reply)
پروژه OverClock کردن STM32 با کامپایلر IAR (You can see links before reply)
دانلود کتابخانه Delay (You can see links before reply)
راه اندازی LCD کاراکتری با توابع CMSIS با کامپایلر IAR (You can see links before reply)
راه اندازی LCD گرافیکی با توابع CMSIS با کامپایلر IAR (You can see links before reply)
برنامه استفاده از سوئیچ های روی بورد با توابع CMSIS با کامپایلر IAR (You can see links before reply)
توضیحات توابع RCC از کتابخونه CMSIS (You can see links before reply)
توضیحات حالات نمونه برداری ADC (You can see links before reply)
توضیحاتی در مورد سریهای مختلف STM32F10X (You can see links before reply)
تشریح Clock security system (You can see links before reply)
باس ها در سری STM32 (You can see links before reply)
تشریح چند بیت مربوط به Clock Security (You can see links before reply)
چگونگی ارتباط توابع رجیستری و CMSIS با CPU (You can see links before reply)
Alternate Function (You can see links before reply)
رجیستر های فعال و ریست کردن واحد RCC (You can see links before reply)
راه اندازی ADC با توابع رجیستری (You can see links before reply)
دانلود کتابخانه CMSIS (You can see links before reply)
توضیحات اولیه GPIO با کتابخونه CMSIS (You can see links before reply)
ادامه بحث GPIO (You can see links before reply)
ادامه GPIO (You can see links before reply)
قسمت پایانی GPIO (You can see links before reply)
دانلود پروژه Template (You can see links before reply)
قرار دادن دیتا روی پورتها , بخش GPIO (You can see links before reply)
دانلود مثال GPIO (You can see links before reply)
دستور تغییر ضریب PLL (You can see links before reply)
نکات مربوط به هدر stm32f10x_conf.h (You can see links before reply)
نمونه برداری تکی با ADC (You can see links before reply)
دانلود مثال ADC (You can see links before reply)
تغییر مد دیتا برای السیدی رنگی (You can see links before reply)
دانلود لایبرری السیدی کاراکتری مد 4 بیت (You can see links before reply)
دانلود لایبرری السیدی N96 مد 8 بیتی (You can see links before reply)
دانلود لایبرری السیدی N96 مد 16 بیتی (You can see links before reply)
نحوه پروگرم کردن از طریق پورت سریال (You can see links before reply)
نرم افزار تبدیل عکس به فایل هدر برای السیدی N96 (You can see links before reply)
راه اندازی ADC با کامپایلر IAR (You can see links before reply)
راه اندازی USART با کامپایلر IAR (You can see links before reply)
راه اندازی السیدی نوکیا 6610 با کامپایلر IAR (You can see links before reply)
راه اندازی سنسور دمای داخلی میکرو با کامپایلر IAR (You can see links before reply)
راه اندازی سنسور دمای DS18B20 با کامپایلر IAR (You can see links before reply)
دانلود پروژه سنسور دمای DS18B20 با السیدی کاراکتری کامپایلر IAR (You can see links before reply)
دانلود کتابخونه راه انداز برای lcd7 اینچ با درایور ssd1963 (You can see links before reply)
دانلود شماتیک بورد STM32 (You can see links before reply)
راه اندازی سنسور دمای داخلی میکرو با کامپایلر Keil (You can see links before reply)
دانولد پروژه CMSIS_OS (You can see links before reply)
کار با Free RTOS (You can see links before reply)
اندازه گیری دما و ارسال با SMS (You can see links before reply)
دانلود فایل Main تنظیم شده برای RTOS (You can see links before reply)
راه اندازی SPI با کامپایلر Keil (You can see links before reply)
StdPeriph_Driver یعنی چی ؟ (You can see links before reply)
راه اندازی وقفه با کامپایلر Keil (You can see links before reply)
جمع آوری مطالب آموزشی در یک فایل word تا پست 600 (You can see links before reply)
راه اندازی RTC با کامپایلر Keil (You can see links before reply)


تا صفحه 67 ویرایش شد . :wink:

alishekarriz
02-02-2012, 14:04
برای شروع اطلاعات تکراری ولی مهم رو میزارم ..

مشخصات کلی وخلاصه میکروی مورد نظر:


The STM32F103xx medium-density performance line family incorporates the high-performance ARM Cortex™-M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses. All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN.

The devices operate from a 2.0 to 3.6 V power supply. They are available in both the –40 to +85 °C temperature range and the –40 to +105 °C extended temperature range. A comprehensive set of power-saving mode allows the design of low-power applications.

The STM32F103xx medium-density performance line family includes devices in six different package types: from 36 pins to 100 pins. Depending on the device chosen, different sets of peripherals are included, the description below gives an overview of the complete range of peripherals proposed in this family.

These features make the STM32F103xx medium-density performance line microcontroller family suitable for a wide range of applications such as motor drives, application control, medical and handheld equipment, PC and gaming peripherals, GPS platforms, industrial applications, PLCs, inverters, printers, scanners, alarm systems, video intercoms, and HVACs.
DATASHEET
Key Features


ARM 32-bit Cortex™-M3 CPU Core
72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
Single-cycle multiplication and hardware division
Memories
64 or 128 Kbytes of Flash memory
20 Kbytes of SRAM
Clock, reset and supply management
2.0 to 3.6 V application supply and I/Os
POR, PDR, and programmable voltage detector (PVD)
4-to-16 MHz crystal oscillator
Internal 8 MHz factory-trimmed RC
Internal 40 kHz RC
PLL for CPU clock
32 kHz oscillator for RTC with calibration
Low power
Sleep, Stop and Standby modes
VBAT supply for RTC and backup registers
2 x 12-bit, 1 μs A/D converters (up to 16 channels)
Conversion range: 0 to 3.6 V
Dual-sample and hold capability
Temperature sensor
DMA
7-channel DMA controller
Peripherals supported: timers, ADC, SPIs, I2Cs and USARTs
Up to 80 fast I/O ports
26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
Debug mode
Serial wire debug (SWD) & JTAG interfaces
7 timers
Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
16-bit, motor control PWM timer with dead-time generation and emergency stop
2 watchdog timers (Independent and Window)
SysTick timer 24-bit downcounter
Up to 9 communication interfaces
Up to 2 x I2C interfaces (SMBus/PMBus)
Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)
Up to 2 SPIs (18 Mbit/s)
CAN interface (2.0B Active)
USB 2.0 full-speed interface
CRC calculation unit, 96-bit unique ID
Packages are ECOPACK®

نکته جالب این هست که با همین برد (با تحقیق اولیه) میشود میکرو STM32F107 رو هم کار کرد و به امکانات بیشتری مثل شبکه و USB Host دست یافت .. البته نیاز به ایجاد لایه سخت افزاری توسط بردهای کمکی هست


The STM32F105xx and STM32F107xx connectivity line family incorporates the high-performance ARM®Cortex™-M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 256 Kbytes and SRAM 64 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses. All devices offer two 12-bit ADCs, four general-purpose 16-bit timers plus a PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs, three SPIs, two I2Ss, five USARTs, an USB OTG FS and two CANs. Ethernet is available on the STM32F107xx only.

The STM32F105xx and STM32F107xx connectivity line family operates in the –40 to +105 °C temperature range, from a 2.0 to 3.6 V power supply. A comprehensive set of power-saving mode allows the design of low-power applications.

The STM32F105xx and STM32F107xx connectivity line family offers devices in three different package types: from 64 pins to 100 pins. Depending on the device chosen, different sets of peripherals are included, the description below gives an overview of the complete range of peripherals proposed in this family.

These features make the STM32F105xx and STM32F107xx connectivity line microcontroller family suitable for a wide range of applications such as motor drives and application control, medical and handheld equipment, industrial applications, PLCs, inverters, printers, and scanners, alarm systems, video intercom, HVAC and home audio equipment.
DATASHEET
Key Features


Core: ARM 32-bit Cortex™-M3 CPU
72 MHz maximum frequency, 1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
Single-cycle multiplication and hardware division
Memories
64 to 256 Kbytes of Flash memory
64 Kbytes of general-purpose SRAM
Clock, reset and supply management
2.0 to 3.6 V application supply and I/Os
POR, PDR, and programmable voltage detector (PVD)
3-to-25 MHz crystal oscillator
Internal 8 MHz factory-trimmed RC
Internal 40 kHz RC with calibration
32 kHz oscillator for RTC with calibration
Low power
Sleep, Stop and Standby modes
VBAT supply for RTC and backup registers
2 × 12-bit, 1 μs A/D converters (16 channels)
Conversion range: 0 to 3.6 V
Sample and hold capability
Temperature sensor
up to 2 MSPS in interleaved mode
2 × 12-bit D/A converters
DMA: 12-channel DMA controller
Supported peripherals: timers, ADCs, DAC, I2Ss, SPIs, I2Cs and USARTs
Debug mode
Serial wire debug (SWD) & JTAG interfaces
Cortex-M3 Embedded Trace Macrocell™
Up to 80 fast I/O ports
51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
CRC calculation unit, 96-bit unique ID
Up to 10 timers with pinout remap capability
Up to four 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
1 × 16-bit motor control PWM timer with dead-time generation and emergency stop
2 × watchdog timers (Independent and Window)
SysTick timer: a 24-bit downcounter
2 × 16-bit basic timers to drive the DAC
Up to 14 communication interfaces with pinout remap capability
Up to 2 × I2C interfaces (SMBus/PMBus)
Up to 5 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)
Up to 3 SPIs (18 Mbit/s), 2 with a multiplexed I2S interface that offers audio class accuracy via advanced PLL schemes
2 × CAN interfaces (2.0B Active) with 512 bytes of dedicated SRAM
USB 2.0 full-speed device/host/OTG controller with on-chip PHY that supports HNP/SRP/ID with 1.25 Kbytes of dedicated SRAM
10/100 Ethernet MAC with dedicated DMA and SRAM (4 Kbytes): IEEE1588 hardware support, MII/RMII available on all packages

sigma-mx
02-02-2012, 14:21
به به ، به سلامتی ! بالاخره شروع شد این آموزش .

alishekarriz
02-02-2012, 14:44
این هم نقشه یا چارت حافظه و رجیسترها


You can see links before reply

برای ایجاد عدد حافظه با توجه به پارامترهای معرفی شده در دیتاشیبت از فرمول زیر استفاده میشود.


Bit banding
The Cortex™-M3 memory map includes two bit-band regions. These regions map each
word in an alias region of memory to a bit in a bit-band region of memory. Writing to a word
in the alias region has the same effect as a read-modify-write operation on the targeted bit in
the bit-band region.

In the STM32F10xxx both peripheral registers and SRAM are mapped in a bit-band region.
This allows single bit-band write and read operations to be performed. The operations are
only available for Cortex-M3 accesses, not from other bus masters (e.g. DMA).

A mapping formula shows how to reference each word in the alias region to a corresponding
bit in the bit-band region. The mapping formula is:

bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)

where:
bit_word_addr is the address of the word in the alias memory region that maps to the
targeted bit.
bit_band_base is the starting address of the alias region
byte_offset is the number of the byte in the bit-band region that contains the targeted bit
bit_number is the bit position (0-7) of the targeted bit.

Example:
The following example shows how to map bit 2 of the byte located at SRAM address
0x20000300 in the alias region:

0x22006008 = 0x22000000 + (0x300*32) + (2*4).

Writing to address 0x22006008 has the same effect as a read-modify-write operation on bit
2 of the byte at SRAM address 0x20000300.
Reading address 0x22006008 returns the value (0x01 or 0x00) of bit 2 of the byte at SRAM
address 0x20000300 (0x01: bit set; 0x00: bit reset).

alishekarriz
02-02-2012, 16:53
یک از نخستین قدمها در تنظیم پارامترها تنظیم فرکانس کاری (CLOCK) قسمتهای مختلف (مخصوصا کلاک کلی سیستم) می باشد.

این کار با تنظیم رجیسترهای RCC انجام می شود


Clocks
Three different clock sources can be used to drive the system clock (SYSCLK):
● HSI oscillator clock سرعت بالاي داخلي
● HSE oscillator clock سرعت بالاي خارجي
● PLL clock ضرب كننده
The devices have the following two secondary clock sources:
سرعت پايين داخلي
● 40 kHz low speed internal RC (LSI RC) which drives the independent watchdog and
optionally the RTC used for Auto-wakeup from Stop/Standby mode.
سرعت پايين خارجي براي زمان ثانيه و دقيقه و ساعت
● 32.768 kHz low speed external crystal (LSE crystal) which optionally drives the real-
time clock (RTCCLK)

HSE clock
The high speed external clock signal (HSE) can be generated from two possible clock
sources:
● HSE external crystal/ceramic resonator
● HSE user external clock
The resonator and the load capacitors have to be placed as close as possible to the
oscillator pins in order to minimize output distortion and startup stabilization time. The
loading capacitance values must be adjusted according to the selected oscillator.

HSI clock
The HSI clock signal is generated from an internal 8 MHz RC Oscillator and can be used
directly as a system clock or divided by 2 to be used as PLL input.
The HSI RC oscillator has the advantage of providing a clock source at low cost (no external
components). It also has a faster startup time than the HSE crystal oscillator however, even
with calibration the frequency is less accurate than an external crystal oscillator or ceramic
resonator.

PLL
The internal PLL can be used to multiply the HSI RC output or HSE crystal output clock
frequency. Refer to Figure 8 and Clock control register (RCC_CR).
The PLL configuration (selection of HSI oscillator divided by 2 or HSE oscillator for PLL
input clock, and multiplication factor) must be done before enabling the PLL. Once the PLL
enabled, these parameters cannot be changed.
An interrupt can be generated when the PLL is ready if enabled in the Clock interrupt
register (RCC_CIR).
If the USB interface is used in the application, the PLL must be programmed to output 48 or
72 MHz. This is needed to provide a 48 MHz USBCLK

براي دستيابي به فركانسهاي بالا مستقيم از كريستال يا اسيلاتورهاي ديگر استفاده نميشود. بلكه با دادن ضريب توسط مدارهاي داخلي PLL ميتوان فركانس اسيلاتور داخلي يا خارجي مثلا 8 مگ را به مقادير بالاتر تغيير داد .. در اين مدل حداكثر فركانس استاندارد و تضمين شده 72 مگا هرتز مي باشد.
وليكن اوركلاك كردن و رسيدن به فركانسهاي بالاتر با ايجاد تمهيدات خنك كننده براي افراد ماهر دور از دسترس نيست

LSE clock
The LSE crystal is a 32.768 kHz Low Speed External crystal or ceramic resonator. It has the
advantage providing a low-power but highly accurate clock source to the real-time clock
peripheral (RTC) for clock/calendar or other timing functions.
The LSE crystal is switched on and off using the LSEON bit in Backup domain control
register (RCC_BDCR).

LSI clock
The LSI RC acts as an low-power clock source that can be kept running in Stop and
Standby mode for the independent watchdog (IWDG) and Auto-wakeup unit (AWU). The
clock frequency is around 40 kHz (between 30 kHz and 60 kHz). For more details, refer to
the electrical characteristics section of the datasheets.
The LSI RC can be switched on and off using the LSION bit in the Control/status register
(RCC_CSR).

System clock (SYSCLK) selection
After a system reset, the HSI oscillator is selected as system clock. When a clock source is
used directly or through the PLL as system clock, it is not possible to stop it.
A switch from one clock source to another occurs only if the target clock source is ready
(clock stable after startup delay or PLL locked). If a clock source which is not yet ready is
selected, the switch will occur when the clock source will be ready. Status bits in the Clock
control register (RCC_CR) indicate which clock(s) is (are) ready and which clock is currently
used as system clock.

Clock-out capability
The microcontroller clock output (MCO) capability allows the clock to be output onto the
external MCO pin. The configuration registers of the corresponding GPIO port must be
programmed in alternate function mode. One of 4 clock signals can be selected as the MCO
clock.
● SYSCLK
● HSI
● HSE
● PLL clock divided by 2

Clock control register (RCC_CR)
Address offset: 0x00
Reset value: 0x0000 XX83 where X is undefined.
Access: no wait state, word, half-word and byte access

You can see links before reply
Bits 31:26 Reserved, must be kept at reset value.
Bit 25 PLLRDY: PLL clock ready flag

Set by hardware to indicate that the PLL is locked.
0: PLL unlocked
1: PLL locked

Bit 24 PLLON: PLL enable
Set and cleared by software to enable PLL.
Cleared by hardware when entering Stop or Standby mode. This bit can not be reset if the
PLL clock is used as system clock or is selected to become the system clock.
0: PLL OFF
1: PLL ON

Bits 23:20 Reserved, must be kept at reset value.
Bit 19 CSSON: Clock security system enable
Set and cleared by software to enable the clock security system. When CSSON is set, the
clock detector is enabled by hardware when the HSE oscillator is ready, and disabled by
hardware if a HSE clock failure is detected.
0: Clock detector OFF
1: Clock detector ON (Clock detector ON if the HSE oscillator is ready , OFF if not).

Bit 18 HSEBYP: External high-speed clock bypass
Set and cleared by software to bypass the oscillator with an external clock. The external
clock must be enabled with the HSEON bit set, to be used by the device. The HSEBYP bit
can be written only if the HSE oscillator is disabled.
0: external 4-16 MHz oscillator not bypassed
1: external 4-16 MHz oscillator bypassed with external clockRM0008 Low-, medium-, high- and XL-density reset and clock control (RCC)
Doc ID 13902 Rev 14 97/1096

Bit 17 HSERDY: External high-speed clock ready flag
Set by hardware to indicate that the HSE oscillator is stable. This bit needs 6 cycles of the
HSE oscillator clock to fall down after HSEON reset.
0: HSE oscillator not ready
1: HSE oscillator ready

Bit 16 HSEON: HSE clock enable
Set and cleared by software.
Cleared by hardware to stop the HSE oscillator when entering Stop or Standby mode. This
bit cannot be reset if the HSE oscillator is used directly or indirectly as the system clock.
0: HSE oscillator OFF
1: HSE oscillator ON

Bits 15:8 HSICAL[7:0]: Internal high-speed clock calibration
These bits are initialized automatically at startup.

Bits 7:3 HSITRIM[4:0]: Internal high-speed clock trimming
These bits provide an additional user-programmable trimming value that is added to the

HSICAL[7:0] bits. It can be programmed to adjust to variations in voltage and temperature
that influence the frequency of the internal HSI RC.
The default value is 16, which, when added to the HSICAL value, should trim the HSI to 8
MHz ± 1%. The trimming step (Fhsitrim) is around 40 kHz between two consecutive HSICAL
steps.

Bit 2 Reserved, must be kept at reset value.

Bit 1 HSIRDY: Internal high-speed clock ready flag

Set by hardware to indicate that internal 8 MHz RC oscillator is stable. After the HSION bit is
cleared, HSIRDY goes low after 6 internal 8 MHz RC oscillator clock cycles.

0: internal 8 MHz RC oscillator not ready
1: internal 8 MHz RC oscillator ready

Bit 0 HSION: Internal high-speed clock enable
Set and cleared by software.
Set by hardware to force the internal 8 MHz RC oscillator ON when leaving Stop or Standby
mode or in case of failure of the external 4-16 MHz oscillator used directly or indirectly as
system clock. This bit cannot be reset if the internal 8 MHz RC is used directly or indirectly
as system clock or is selected to become the system clock.

0: internal 8 MHz RC oscillator OFF
1: internal 8 MHz RC oscillator ON

alishekarriz
02-02-2012, 17:50
البته شناخت رجیسترهای اصلی CPU بسیار مهم هست
در واقع اگر نیاز به انجام محاسبات به زبان اسمبلی باشد شناخت توانایی هریک از این رجیسترها بسیار مهم خواهد بود

You can see links before reply


General-purpose registers
R0-R12 are 32-bit general-purpose registers for data operations.

Stack pointer
The Stack Pointer (SP) is register R13. In Thread mode, bit[1] of the CONTROL register

indicates the stack pointer to use:
● 0 = Main Stack Pointer (MSP). This is the reset value.
● 1 = Process Stack Pointer (PSP).

On reset, the processor loads the MSP with the value from address 0x00000000.
Link register
The Link Register (LR) is register R14. It stores the return information for subroutines,
function calls, and exceptions. On reset, the processor loads the LR value 0xFFFFFFFF.
Program counter
The Program Counter (PC) is register R15. It contains the current program address. Bit[0] is
always 0 because instruction fetches must be halfword aligned. On reset, the processor
loads the PC with the value of the reset vector, which is at address 0x00000004.

alishekarriz
02-02-2012, 18:26
حالا باید یک سری دستور داشته باشیم که توسط آنها در رجیستر ها بنویسیم

دوستان هر کسی میتونه توضیحات و شرح این دستورات رو بگه ... لطفا یک برنامه بنویسید که فرکانس داخلی 8 مگ را انتخاب و تنظیم نماید. (با دستور اسمبلی البته ) لطفا یافتن عدد هگز تنظیمی و جزئیات ست کردن بیتها را توضیح بفرمایید...

You can see links before reply


ADR
Load PC-relative address.
Syntax

ADR{cond} Rd, label
where:
● ‘cond’ is an optional condition code (see Conditional execution on page 58)
● ‘Rd’ is the destination register
● ‘label’ is a PC-relative expression (see PC-relative expressions on page 57)
Operation
ADR determines the address by adding an immediate value to the PC. It writes the result to
the destination register.
ADR produces position-independent code, because the address is PC-relative.
If you use ADR to generate a target address for a BX or BLX instruction, you must ensure
that bit[0] of the address you generate is set to1 for correct execution.
Values of label must be within the range -4095 to 4095 from the address in the PC
Examples
ADR R1, TextMessage; write address value of a location labelled as
; TextMessage to R1

LDR and STR, immediate offset
Load and store with immediate offset, pre-indexed immediate offset, or post-indexed
immediate offset.
Syntax
op{type}{cond} Rt, [Rn {, #offset}]; immediate offset
op{type}{cond} Rt, [Rn, #offset]!; pre-indexed
op{type}{cond} Rt, [Rn], #offset; post-indexed
opD{cond} Rt, Rt2, [Rn {, #offset}]; immediate offset, two words
opD{cond} Rt, Rt2, [Rn, #offset]!; pre-indexed, two words
opD{cond} Rt, Rt2, [Rn], #offset; post-indexed, two words


Examples
LDRR8, [R10]; loads R8 from the address in R10.
LDRNER2, [R5, #960]!; loads (conditionally) R2 from a word
; 960 bytes above the address in R5, and
; increments R5 by 960.
STRR2, [R9,#const-struc]; const-struc is an expression evaluating
; to a constant in the range 0-4095.
STRHR3, [R4], #4; Store R3 as halfword data into address in
; R4, then increment R4 by 4
LDRD R8, R9, [R3, #0x20]; Load R8 from a word 32 bytes above the
; address in R3, and load R9 from a word 36
; bytes above the address in R3
STRDR0, R1, [R8], #-16; Store R0 to address in R8, and store R1 to
; a word 4 bytes above the address in R8,
; and then decrement R8 by 16.

alishekarriz
03-02-2012, 16:59
در آرم كلاك هر قسمت به طور مجزا قابل تنظيم هست ..

براي تنظيم سرعت پايه هاي خروجي - ضرب كننده - مبدل و بعضي موارد ديگر از رجيستر زير استفاده ميشود.

You can see links before reply



Bits 26:24 MCO[3:0]: Microcontroller clock output

فركانس كاري پايه هاي خروجي
Set and cleared by software.
00xx: No clock
0100: System clock (SYSCLK) selected
0101: HSI clock selected
0110: HSE clock selected
0111: PLL clock divided by 2 selected
1000: PLL2 clock selected
1001: PLL3 clock divided by 2 selected
1010: XT1 external 3-25 MHz oscillator clock selected (for Ethernet)
1011: PLL3 clock selected (for Ethernet)
Note: This clock output may have some truncated cycles at startup or during MCO clock source
switching.
The selected clock to output onto the MCO pin must not exceed 50 MHz (the maximum I/O
speed).

طبق مطلب بالا حداكثر فركانس كاري پايه ها 50 مگاهرتز مي باشد

Bit 22 OTGFSPRE: USB OTG FS prescaler

براي انتخاب كلاك USB
Set and cleared by software to generate the 48 MHz USB OTG FS clock. This bit must be valid
before enabling the OTG FS clock in the RCC_APB1ENR register. This bit can not be cleared if the
OTG FS clock is enabled.
0: PLL VCO (2 × PLLCLK) clock is divided by 3 (PLL must be configured to output 72 MHz)
1: PLL VCO (2 × PLLCLK) clock is divided by 2 (PLL must be configured to output 48 MHz)
Bits 21:18 PLLMUL[3:0]: PLL multiplication factor
These bits are written by software to define the PLL multiplication factor. They can be written only
when PLL is disabled.
000x: Reserved
0010: PLL input clock x 4
0011: PLL input clock x 5
0100: PLL input clock x 6
0101: PLL input clock x 7
0110: PLL input clock x 8
0111: PLL input clock x 9
10xx: Reserved
1100: Reserved
1101: PLL input clock x 6.5
111x: Reserved
Caution: The PLL output frequency must not exceed 72 MHz.
Bit 17 PLLXTPRE: LSB of division factor PREDIV1
Set and cleared by software to select the least significant bit of the PREDIV1 division factor. It is the
same bit as bit(0) in the RCC_CFGR2 register, so modifying bit(0) in the RCC_CFGR2 register
changes this bit accordingly.
If bits[3:1] in register RCC_CFGR2 are not set, this bit controls if PREDIV1 divides its input clock by
2 (PLLXTPRE=1) or not (PLLXTPRE=0).
This bit can be written only when PLL is disabled.
Bit 16 PLLSRC: PLL entry clock source
Set and cleared by software to select PLL clock source. This bit can be written only when PLL is
disabled.
0: HSI oscillator clock / 2 selected as PLL input clock
1: Clock from PREDIV1 selected as PLL input clock
Note: When changing the main PLL’s entry clock source, the original clock source must be switched
off only after the selection of the new clock source

Bits 14:14 ADCPRE[1:0]: ADC prescaler

تقسيم كننده فركانس مبدل - كه براي ايجاد دقت و تبديل صحيح بسيار لازم هست
Set and cleared by software to select the frequency of the clock to the ADCs.
00: PCLK2 divided by 2
01: PCLK2 divided by 4
10: PCLK2 divided by 6
11: PCLK2 divided by 8
Bits 13:11 PPRE2[2:0]: APB high-speed prescaler (APB2)
Set and cleared by software to control the division factor of the APB High speed clock (PCLK2).
0xx: HCLK not divided
100: HCLK divided by 2
101: HCLK divided by 4
110: HCLK divided by 8
111: HCLK divided by 16
Bits 10:8 PPRE1[2:0]: APB Low-speed prescaler (APB1)
Set and cleared by software to control the division factor of the APB Low speed clock (PCLK1).
0xx: HCLK not divided
100: HCLK divided by 2
101: HCLK divided by 4
110: HCLK divided by 8
111: HCLK divided by 16
Caution: Software must configure these bits ensure that the frequency in this domain does not
exceed 36 MHz.
Bits 7:4 HPRE[3:0]: AHB prescaler
Set and cleared by software to control AHB clock division factor.
0xxx: SYSCLK not divided
1000: SYSCLK divided by 2
1001: SYSCLK divided by 4
1010: SYSCLK divided by 8
1011: SYSCLK divided by 16
1100: SYSCLK divided by 64
1101: SYSCLK divided by 128
1110: SYSCLK divided by 256
1111: SYSCLK divided by 512
Note: The prefetch buffer must be kept on when using a prescaler different from 1 on the AHB clock.
Refer to the section Reading the Flash memory on page 58 for more details.
Caution: The AHB clock frequency must be at least 25 MHz when the Ethernet is used.

Bits 3:2 SWS[1:0]: System clock switch status
براي مشاهده و فهميدن منبع مورداستفاده جهت كلاك سيستم
Set and cleared by hardware to indicate which clock source is used as system clock.
00: HSI oscillator used as system clock
01: HSE oscillator used as system clock
10: PLL used as system clock
11: Not applicable

Bits 1:0 SW[1:0]: System clock Switch
براي انتخاب منبع كلاك سيستم مي باشد
Set and cleared by software to select SYSCLK source.
Set by hardware to force HSI selection when leaving Stop and Standby mode or in case of failure of
the HSE oscillator used directly or indirectly as system clock (if the Clock Security System is
enabled).
00: HSI selected as system clock
01: HSE selected as system clock
10: PLL selected as system clock
11: Not allowed

alishekarriz
04-02-2012, 21:36
اگر دوستان سختشونه از صفر بنويسند

يك برنامه ساده از ميكروهاي ديگه را بياوريم و خط به خط معادل سازي كنيم ؟

pooriya
04-02-2012, 21:46
سلام
علی اقا واقعیتش بدون وجود سخت افزار مناسب و بدون تست برنامه های نوشته شده استارت کار چندان درستی نیست.
چون بدون وجود سخت افزار قرار دادن کد کار راحتی هست و می شه انواع نمونه کد گذاشت.ولی نمیشه درک درستی از برنامه داشت.
بنده هم چون iar کار می کنم،و برنامه های موجود در اینترنت با keil هستش(اغلب) واسه همین نمی تونم اطمینان کنم.

M.ABDOLLAHI
04-02-2012, 22:07
نه برای IAR هم برنامه هست انصافا زیاده در سایتهای
301 Moved Permanently (You can see links before reply)
You can see links before reply
و خود سایته شرکته ST

sigma-mx
05-02-2012, 02:55
خب ، من خوشبختانه قسمت GPIO رو کاملا تونستم راه بندازم و کاملا هم با شبیه ساز کیل کار می کنه . اول یکم تئوری میگم بعد میریم سر مثال ..

لیست رجیسترهای GPIO :

1. GPIOx_CRL
2. GPIOx_CRH
3. GPIOx_IDR
4.GPIOx_ODR
5.GPIOx_BSRR
6.GPIOx_BRR
7.GPIOx_LCKR

اول بگم که توی GPIOx ، اینجا x همون اسم پورت هست مثل B یا C .
در نام بردن رجیستر ها شماره اونها رو به ترتیب بالا می گم.
مانند تمامی میکروکنترلرها ، چون پین های میکرو وظایف مختلفی انجام میدن پس باید حالت یا مد اون پایه رو اول مشخص کرد . مثلا ممکنه یک پین میکرو 5 کار انجام بده ( io-timer-pwm-analoge-osc) بنابراین باید هر پین در هر لحظه تنها به یک مد کار کنه ..
برای کانفیگ یاپیکر بندی هر پورت باید از رجیستر 1 و 2 استفاده کرد . 1 برای بخش پایین پورت یا پین 0 تا 7 و 2 برای بخش بالا یا پین 8 تا 15 هر پورت .

You can see links before reply

بنابراین با توجه به شکل برای هر پین 4 بیت تنظیمات داریم .دو بیت برای mode و دو بیت برای cnf . مطابق جدول فکر کنم راحت متوجه شید چطوریه .
مثلا داریم پین 0 رو کانفیگ میکنیم . می خواهیم اونو input و آنالوگ تنطیم کنیم . پس با توجه به جدول mode0 رو 0 و cnf0 رو 0 میزاریم .
مقدار پیش فرض این رجیستر برای همه پورتها 0x44444444 هست . می دونید چرا ؟؟؟؟؟؟؟
چون معادل باینری این عدد برای هر پین میشه 0x4 === 0100 . بیت صفرم و یکم صفر یعنی input و بیت دوم 1 و سوم 0 هم یعنی (01) float یا Hiz .

sigma-mx
05-02-2012, 12:33
خب رجیستر 1و2 پس برای کانفیگ هر پین بود . حالا رجیستر بعدی ( شماره 3) :
GPIOx_IDR : این رجیستر 16 بیتی است و اگر پین مورد نظر ورودی تنظیم شود توسط این رجیستر می شود محتوای پورت رو مشاهدی کرد .
مثال :

GPIOB -> CRL = 0x88888888
GPIOB -> CRH = 0x22222222
i = GPIO -> IDR

خط اول مربوط به کانفیگ 8 بیت پایین پورت B هست که هر هشت پین با عدد 8
پیکربندی شده . یعنی عدد 1000 که دو بیت کم ارزش برای حالت ورودی و 10 دو بیت با ارزش برای حالت input with pull up/down .
ولی در خط دوم مقدار 2 برای هر پین یعنی 0010 ، حالت output mode ,max speed 2MHz و general purpose push-pull مطابق جدول میشه .

You can see links before reply


پس یعنی بیت 0 تا 7 پورت B ورودی و بیت 8 تا 15 خروجی است . حالا ما مقدار بیت 0 تا 7 که ورودی هست رو در صورت تغییر این پین ها می تونید در رجیستر IDR ببینید .

sigma-mx
05-02-2012, 12:40
GPIOx_ODR :
مثل رجیستر قبل منتها برای مقدار دهی به پورت . اینهم 16 بیتی است .

GPIOB -> CRL = 0x88888888
GPIOB -> CRH = 0x22222222
GPIOB -> 0xffff0000


You can see links before reply

sigma-mx
05-02-2012, 12:53
اینم یه مثال عملی با فایلهای لازم برای برنامه . فقط برنامه رو باز کنید ، تو حالت دیباگ برید و run رو بزنید . توی پنجره peripheral مربوط به پورت B می تونید پورت B رو که چشمک می زنه ببینید ..

sigma-mx
05-02-2012, 13:25
GPIOx_BSRR :
مانند رجیستر ODR برای تغییر محتوای خروجی پورت است منتها سه تفاوت داره :
1. تنها قابل نوشتن هست
2. طریقه ست کردن و ریست کردن هر بیت با هم فرق داره .
3. 32 بیتی هست
در این رجیستر بیت 0 تا 15 برای ست کردن بیتها و از بیت 16 تا 31 برای ریست کردن بیتهاست
مثال

GPIOB -> BSRR = 0x0000ffff

این دستور تمام 16 بیت رو ست میکنه
و این دستور:

00010001000100010000000000000000 = GPIOB -> BSRR = 0x11110000

بیتهای 16 و 20 و 24 و 28 رو ریست می کنه .



You can see links before reply

sigma-mx
05-02-2012, 13:30
GPIOx_BRR :
رجیستر 16 بیتی که محتوای رجیستر ODR رو ریست می کنه . قابل خوندن نیست .
مثال

GPIOB -> BRR = 0x0000ffee


You can see links before reply

sigma-mx
05-02-2012, 14:06
و آخرین رجیستر بخش GPIO..
GPIOx_LCKR :
چنانچه یک پورت یا پین رو در ابتدا پیکربندی کردید برای اطمینان از تغییر احتمالی عمدی یا غیر عمدی پیکربندی و ایمنی ، می توانید تنظیمات پورت یا پین مورد نظر رو قفل یا لاک کنید . در صورت قفل شدن تنظیمات تا ریست بعدی میکرو این تنظیمات قابل تغییر نخواهد بود .. شما حتی می توانید تنها یک بیت از پورت رو قفل کنید . اجرای عمل قفل شامل مراحل خاصی هست که باید حتما رعایت بشه !

You can see links before reply


You can see links before reply

ابتدا باید طبق جدول از بیت 0 تا 15 ، بیت هایی رو که می خواهیم تنظیماتش قفل بشه رو انتخاب کنیم :

GPIOB -> LCKR = 0x0000 0001

در اینجا بیت 0 از پورت رو انتخاب کردیم . حالا باید طبق روندی که گفته شده بیت 16 که مربوط به عملیات لاک هست رو مطابق زیر 1 و 0 کنیم :

bit 16 =1 ---> bit 16 =0 --- > bit16 =1

حالا با یکی دو دستور محتوای این پین رو می خونیم تا 1 ثابت بمونه . اگر تنها این مراحل رو درست انجام بدید عمل لاک انجام میشه !


GPIOB -> CRL = 0x88888888

GPIOB -> CRH = 0x22222222


GPIOB -> LCKR = 0x00000001
GPIOB -> LCKR |= 0x00010000 // set // Locking Sequence

GPIOB->LCKR &= 0xfffeffff // reset

// GPIOB->LCKR |= 0x00010000 // set // Locked
i = GPIOB->LCKR // read 0
i = GPIOB->LCKR // read 1

حالا اگر این دستور رو بکار ببریم برای تغییر کانفیگ بیت 0 پورت کار نمی کنه !!
در سیمولاتور هم بخوبی می تونید این رو تست کنید . اگه بیت لاک بشه با موس نمی تونید تنظیمات اون بیت رو عوض کنید !!

!!! GPIOB -> CRL = 0x44444334 // Not work


برنامه نمونه برای قفل بیت 0 از پورت B قرار دادم . خط به خط اجرا کنید و ببینید بعد از قفل شدن چه اتفاقی میوفته ..
یا حق

sigma-mx
05-02-2012, 14:12
خوب حالا این رجیستر ها رو سعی کنید باهاش یه برنامه ساده بنویسید و مشکلات رو بزارید اینجا .
باهمین عملیات بیتی کلی کار میشه کرد ! مثلا با همین دستورات ساده میشه مثلا lcd هم راه انداخت .

M.ABDOLLAHI
05-02-2012, 16:28
میگم نظرتون چیه یک تاپیک درست گنیم هر کی هر نمونه برنامه ای با stm32 داره بگذاره تا بشه یک منبع خوب برای استفاده همه.

alishekarriz
05-02-2012, 19:34
سلام :hi:

آقا واقعا ممنون از آموزشي كه انجام ميدي و سرعت مناسب حركتت :wink:

چند تا سوال داشتم:

1- اين دستورات كه شما نوشتي و مطابق با ديتا شيت هست دستورات كتابخانه هست
آيا
اين دستورات براي اين ميكرو در تمام اديتورها يكسان هست ؟ يعني برنامه هاي IAR -keil - CrossStudio- ARM DS همه از اين كتابخانه ها استفاده ميكنند و اين برنامه رو در همه اونها ميشه كامپايل كرد؟

2- آيا ممكنه عملكرد و فراخواني كتابخانه رو شرح بدهيد كه اين دستور از چندتا كتابخانه ميگذره و چه توابعي رو صدا ميكنه و اون خطي نهايي آيا اسمبلي هست

3- اين دستورات را بدون استفاده از دستورات كتابخانه به صورت اسمبلي مستقيم ميشود بنويسيد؟

يك سوال درباره محيط keil
در محيطهاي برنامه نويسي يك خاصيت پيشنهاد تكميل كد وجود داره .. يعني وقتي نصف دستور رو مينويسيم بقيشو Hint ميده .. اما در keil نديدم .. اين خيلي كمك ميكنه .. كسي ميدونه امكان فعال كردن داره يا نه ؟!

اگر نكنه خيلي سخته .. شايد مجبور بشم برم توي محيطهاي هوشمند بنويسم كپي كنم اينجا



GPIOx_ODR :
مثل رجیستر قبل منتها برای مقدار دهی به پورت . اینهم 16 بیتی است .
GPIOB -> CRL = 0x88888888
GPIOB -> CRH = 0x22222222
GPIOB -> 0xffff0000

استاد اين خط اخر
GPIOB->ODR= 0xffff0000
ميشه ؟
دستور بالا همه خروجيهاي اين پرت رو خاموش ميكنه در حاصلي كه ما نصف بالايي رو به صورت خروجي تنظيم كرده بوديم !!
اين دستور 16 بيتيش معني داره چرا 16 بيت بالايي رو F گذاشتيد؟

استاااااد كجايي ؟؟؟

sigma-mx
05-02-2012, 20:33
تا اونجایی که من می دونم دستورات آرم معمولا نوشتن و خوندن تو یسری آدرس خاص هست. بعد میان برای اون آدرس ها اسم رجیستر می نویسن ( رجیستر مپ ) . این پایه ترین شکلشه . ندیدم مثل 8051 مثلا بنویسه add a,b . با دستورات c این کار رو انجام می دن . ولی این کار هم زیاد فرقی نداره ..
شما از پایه با رجیستر ها کار می کنی . من تا حالا فقط با keil کار کردم نمی دونم define رجیسترها در کامپایلر های دیگه همین شکلیه یا نه .
بقیه بچه ها که آرم کار کردن اگه زحمت بکشن و مشارکت کنن خیلی کار ما راه میوفته ها ... :0013:

Doloop
05-02-2012, 21:21
آقایون واقعا شرمنده ام که تو این بحث زیاد فعالیت ندارم
چون کنکور واقعا وقتمو گرفته
فقط شبها میتونم نیم ساعت یه سری بزنم همین
ولی بعد کنکور حتما بهتون میپیوندم
اگه عمرم قد بده...

بی مخ!
12-02-2012, 23:21
خب دوستان چه خبر؟
دیگه تموم شد؟
واقعاً این آموزش های اولیه که خیلی خوب و عالی بود.
لطفاً ادامه بدید :hi:

agape
13-02-2012, 00:18
من فکر میکنم که اگه یه سخت افزار مناسب باشه ، خیلی بهتر بشه پیشرفت کرد و به نتیجه های خوبی رسید ، خوب حالا دعوت به طراحی یه استارتر کیت میکنم ؟
چه کسانی یارای من اند؟

Doloop
13-02-2012, 00:31
منظورتون از استار تر کیت همون کیت اموزشی stm
خوب ما یه بوردو دادیم برا ساخت تا چند روز دیگه انشاا... میرسه دستمون
اونوقت کار راحت تر و قابل فهم تر پیش میره

agape
13-02-2012, 10:12
بله- منظور من استارتر کیست با امکانات اولیه بود نه بورد آموزشی !
حالا البته بورد آموزشی هم خوبه - ولی این بورد از کجا قراره برسه ؟

M.ABDOLLAHI
13-02-2012, 10:25
همون سخت افزار disoveri که قراره آقای زارعی بیاره بهترین دیگه البته بنظر من cortexm4

sigma-mx
13-02-2012, 12:20
سلام خدمت دوستان . راستش دیدم تمام فکر و ذکر بچه ها رو ساخت برد stm هست ، گفتم وایسم برد برسه بعد ادامه ( بدیم ) نه بدم ! چون قرار بود با هم پیش بریم . اهمیت یادگیری این میکرو برای من خیلی مهمتر از سری های پیشرفته تر مثل m4 هست . دلیلش هم تو کاربردشه ! من می خوام بتونم بطور کاربردی با این میکرو طراحی کنم نه اینکه فقط با امکاناتش ور برم ! با توجه به پارامتر های قیمت ، عدم نویز پذیری (اطمینان) ، سرعت ( کافی برای کار صنعتی ) ، و پشتیبانی از پروتکل های ارتباطی ، اون رو به بهترین گزینه برای طراحی سیستم ها جدید تبدیل می کنه . یه نکته مهم هم تو شکل و package اون هست که با هویه معمولی هم میشه لحیمش کرد و بردش رو تو خونه هم اگه ماهر باشی میشه زد در مواقع اضطراری .

Doloop
13-02-2012, 12:27
ولی این بورد از کجا قراره برسه ؟
خوب اینو بچه ها زحمتشو کشیدن یه بورد طراحی شده رو ازتو اینترنت پیدا کردن وتغیرات لازم رو بسته به نیازمون تو PCB اعمال کردن بعد همونو دادیم برای ساخت الانم پیگیر قطعاتشیم

You can see links before reply

بی مخ!
14-02-2012, 00:17
سلام خدمت دوستان . راستش دیدم تمام فکر و ذکر بچه ها رو ساخت برد stm هست ، گفتم وایسم برد برسه بعد ادامه ( بدیم ) نه بدم ! چون قرار بود با هم پیش بریم . اهمیت یادگیری این میکرو برای من خیلی مهمتر از سری های پیشرفته تر مثل m4 هست . دلیلش هم تو کاربردشه ! من می خوام بتونم بطور کاربردی با این میکرو طراحی کنم نه اینکه فقط با امکاناتش ور برم ! با توجه به پارامتر های قیمت ، عدم نویز پذیری (اطمینان) ، سرعت ( کافی برای کار صنعتی ) ، و پشتیبانی از پروتکل های ارتباطی ، اون رو به بهترین گزینه برای طراحی سیستم ها جدید تبدیل می کنه . یه نکته مهم هم تو شکل و package اون هست که با هویه معمولی هم میشه لحیمش کرد و بردش رو تو خونه هم اگه ماهر باشی میشه زد در مواقع اضطراری .
کاملاً با این حرف شما موافقم، میکروی فوق العاده ای واسه ی کارهای صنعتیه اون هم در تیراژ بالا!

alishekarriz
15-02-2012, 16:39
از دست رفيقان چه بگويم ..گله اي نيست ..

خب دوستان به اميد خدا كار رو ادامه بديم .. يه سرفصل بندي كنيم گام به گام جلو بريم ..

استااااد كجايي

hakimzadeh
15-02-2012, 20:02
باتوجه به اینکه پرتئوس در ورژن جدیدش (7.9) ازسری cortex-m3/lm3s

پشتیبانی می کند،بنظر من گزینه خوبی می تونه باشه.

(LM3S300, LM3S301, LM3S308, LM3S310.LM3S315, LM3S316, LM3S317, LM3S328)

You can see links before reply

sigma-mx
15-02-2012, 22:44
شبیه ساز پروتیوس حتی مدلهای NXP رو هم نمی تونه هنوز خوب شبیه سازی کنه ! اصلا قابل مقایسه با شبیه ساز Keil و بقیه نیست ! برای کار های خیلی سبک چرا .
در مورد ادامه کار ، من جلوی ادامه کار رو نگرفتم ! اولا یکمی کار برام پیش اومده فعلا سرم شلوغه . ثانیا وایسادم بردم برسه که فعلا کارش یکم گیر کرده ! کسی که قراره برام برد و قطعات رو بگیره اونم سرش شلوغه !!! ثالثا همین قسمت رو کسی تا حالا تست کرد اصلا ؟!
مورد آخر هم که خیلی مهمه اینه که نمی دونم چطوریه ! اون جایی که چند نفر دارن در مورد یک چیز خاص کار می کنن و عنوان تاپیک هم که معلومه ! بازم یکی میاد ناخواسته تو این تاپیک تبلیغ چیز دیگه رو میکنه !!! این چه معنی می تونه داشته باشه ؟؟!! یعنی تاپیک رو کلا جمع کنیم و بی خیال این بشیم !!!!

alishekarriz
16-02-2012, 11:11
تاپيك ها نياز به يك مدير دارندكه پاكسازي كنه .. واقعا وب 2 ديگه قديمي شده .. از سيتسمهاي مناسبتر بايد استفاده بشه .. حداقل از سرويسهاي تكميلي و سريع مثل مرتب كردن بر اساس موضوع .. شخص .. و ..

خب من كه با كيل نوشتم و شبيه سازي كردم .. حالا بردم رو بسازم تست عملي هم ميكنم تا دو سه روز ديگه
استاد اولش كه سريع رفتي جلو .. گفتم تاحالا سه ورژن ديگه هم ساختي!!

sigma-mx
16-02-2012, 12:10
مهندس شکر ریز برد من که حتما از برد شما دیرتر حاضر میشه . ولی گروه شما هم که بردتونو مونتاژ کردید انشالله با هم پیش می ریم حتی اگه برد من حاضر نباشه . نگران نباش ، این تاپیک نمی خوابه !!

بی مخ!
16-02-2012, 13:44
sigma-mx (You can see links before reply) عزیز، واقعاً ممنون از آموزشتون.
بنده هم کاملاً استفاده کردم از مطالبتون و تست هم کردم. اگه هم زیاد پست نمیذارم بخاطر اینه که دسترسیم به اینترنت کم شده وگرنه پیگیر صحبت ها و مطالب دوستان هستم.
من طبق گفته ی خودتون که گفتید حالا با این مطالب گفته شده میشه یه LCD معمولی رو راه انداخت دارم دنبال مطالبی برای اون می گردم.
بازم تشکر بابت مطالبتون
موفق باشیم! :wink:

alishekarriz
16-02-2012, 15:29
من ميخوام يه LCD3.2 با تاچش بخرم .. اين مدل خوبه ؟ wistron-opt-145716a

Wistron Opt 145716-A LCD Display Screen [145716-A] : the replacement part you need for your cellphone (You can see links before reply)

بی مخ!
16-02-2012, 16:48
من هم یه wistron-opt-145711a دارم. هم قیمتش خوب بود هم کلاً خوبه :0013:
یکی از مهمترین کارهام با stmهم راه اندازی همین LCD مذکوره :0013:
اگر شما هم از همین نوع گرفتید خیلی خوب میشه که از نتایج کارهای همدیگه استفاده کنیم.
با تشکر

kavir
16-02-2012, 17:09
من هم یه wistron-opt-145711a دارم. هم قیمتش خوب بود هم کلاً خوبه :0013:
یکی از مهمترین کارهام با stmهم راه اندازی همین LCD مذکوره :0013:
اگر شما هم از همین نوع گرفتید خیلی خوب میشه که از نتایج کارهای همدیگه استفاده کنیم.
با تشکر
شما از کجا مطمئن هستین این ویسترون ili9325 یا غیره هست؟
مشکل اصلی اینه دوستان به شماره نوشته روش اعتماد نکنید
دیروز یکی از دوستان سمپل گرفت برای ما درایورش که برمیگردوند ili9335 بود که با هیچ کدوم از درایور ها سازگار نبود و استارت نخورد
اول دیباگ کنید و ببینید درایورش چیه

alishekarriz
16-02-2012, 17:44
آقا مصطفي دقيق ببين درايورش چيه به جناب حسينا هم نشون بده . جواب بده لطفا.. نشسته الان سر بده :wink:

بی مخ!
16-02-2012, 18:57
دوباره سلام
والا بنده که الان خودم مشهد نیستم، دانشگاه بیرجندم آخه و در حال حاضر امکاناتی ندارم برای تست دقیق.
ولی به صورت ظاهری طبق مطالب مجله pmm5 اینی که من دارم مشابه lcd گفته شده در مقاله است.
حالا روش ساده ای واسه تست این lcd هست که انجام بدم؟

armstk
16-02-2012, 20:25
حالا روش ساده ای واسه تست این lcd هست که انجام بدم؟
سلام مهندس عزیز
امروز برد رو تحویل کردم از خونتون :)
دستت درد نکنه

جات خالی عجب بردی زده برامون , کیفیتش عالیه - خیلی راضیم
من الان مونتاژ smd هارو تموم کردم و میکرو رو هم لحیم کردم

برای lcd هم راه هایی که هست اینه که فقط مونتاژش کنی دیگه !

بی مخ!
16-02-2012, 22:08
سلام مهندس عزیز
امروز برد رو تحویل کردم از خونتون :)
دستت درد نکنه

جات خالی عجب بردی زده برامون , کیفیتش عالیه - خیلی راضیم
من الان مونتاژ smd هارو تموم کردم و میکرو رو هم لحیم کردم

برای lcd هم راه هایی که هست اینه که فقط مونتاژش کنی دیگه !
خواهش :0013:
پس اگه اینطوره که باس وایستم فردا صبح که رسید دستم خبرشو بهتون میدم.
ولی کسی که ازش خریدم مطمئن بود و می گفت که درسته!

sigma-mx
16-02-2012, 22:28
خب . به سلامتی . میکرو رو ران کردی خبر بده خوشحال بشیم.

alishekarriz
17-02-2012, 12:18
سلام

من برد روساختم وقتي Option For Target قسمت Debug كليد Setting ميرم اگر برق برد قطع باشه ميگه ولتاژ كمتر از 1 ولت وقتي پاور وصل ميشه شناسايي ميكنه و فركانس 10 مگ رو انتخاب ميكنه

اما وقتي ميام در برنامه و ايكون دانلود رو ميزنم ميگه Ulink نداري .. اين يعني چي ؟

از كجا بفهمم ميكرو سالمه يا خطا كجاست؟

sigma-mx
17-02-2012, 12:46
با چی داری پروگرام میکنی ؟

alishekarriz
17-02-2012, 16:54
سلام اقا جناب حسينا تنظيمات keil رو براي من انجام داد ..مسئله اين بود كه در قيمت تنظيم ديباگر jlink رو تنظيم ميكردم ولي قسمت utility رو دست نزده بودم

با تنظيم هر دو قسمت برنامه در مد jtag و SW پروگرم شد

اما يه نكته اينكه برنامه اي كه طبق صفحه 2 اين فروم نوشتم كار نميكنه يعني وقتي ديباگر سخت افزاري فعال هست و پورت رونگاه ميكني من پورت A رو به صورت خروجي تنظيم و خاموش و روشن ميكنم اما در پنجره IDR در حال تغيير هست به جاي ODR و GPIA_CRL هم برخلاف تنظيم من 22222222 نيست و 444444444 طبق پيش فرض خودشه

ولي وقتي داخل همون پنجره مي نويسم 22222222 روي برد الكترونيكي چراغها روشن ميشه ..

خلاصه دستور توسط برنامه اي كه من نوشتم اعمال نشده هنوز

alishekarriz
17-02-2012, 18:11
اقا يه پروژه رو از اول استارت كنيم

همه فايلهاي پروژه رو توضيح بديم ..

صورت مسئله :
روي برد 3 تا ledهست .. Led1 با فركانس 1 ... Led2 فركانس 0.5 و led3 بافركانس 0.3 روشن خاموش بشه ..
اگر خواستيد پيشرفته تر باشه .. نسبت زمان روشن به خاموش همه led ها توسط پتانسيومتر تنظيم بشه

زمان لازم براي انجام دقيق كامل و تسلط از شنبه تا پنج شنبه 29 بهمن تا 3 اسفند .

اساتيد اموزش بسم الله ..
دوستان كنكوري .. يا علي

sigma-mx
17-02-2012, 19:08
ببین تو همون پنجره دیباگ زیرش چی نوشته ؟ clock enable یا clock disable ؟ یه تابه init هم باید فراخانی بشه تا میکرو شروع بکار کنه ..

بی مخ!
17-02-2012, 22:48
سلام
من هنوز دارم بوردم رو لحیم می کنم، از صبح برام کاری پیش اومد نرسیدم :(
آقا من که jlink ندارم و با flash loader پروگرم می کنم میکرو رو، روی بورد قبلی اینکار می کرد نمی دونم روی این بورد جدیده هم میشه اینطور پروگرم کنم یا نه!

مهندس شکرریز،
آقا با پروژه ای که مشخص کردی خیلی حال کردم، بریم تو کارش :0013:

sigma-mx
18-02-2012, 00:27
مهندس اول برد رو تهیه کردی حالا تازه می گی نمی دونم با flash loader پرو گرام می کنه یا نه ؟؟؟!!!
خب ، نگران نباش منم jlink ندارم ! باید از طریق uart1 ، پروگرام کنی و طبق دیتاشیت برای لود کردن لودر از جامپر های BOOT0 و BOOT1 استفاده کنی. مهندسای NXP به فکر اقشار فقیر جامعه هم بودن ! حالشو ببر :o

alishekarriz
18-02-2012, 01:11
ببین تو همون پنجره دیباگ زیرش چی نوشته ؟ clock enable یا clock disable ؟ یه تابه init هم باید فراخانی بشه تا میکرو شروع بکار کنه ..

اقا من كه همچين نوشته اي نمي بينم ..شما لطفا يه نگاه بنداز ببين چطوريه
You can see links before reply



یکی از شما که جیلینک داره این برنامه رو بریزه رو میکرو ببینه کار میکنه ؟!
مهندس من پروگرامش كردم وقتي يو اس بي رو ميزنم هيچ عكس العملي توي ديوايس منيجر ديده نميشه .. (پاورشم وصله)


آقا با پروژه ای که مشخص کردی خیلی حال کردم، بریم تو کارش

به اميد خدا يكم پيوسته تر و منظمتر و دقيقتر پيش بريم دلگرمتر و شادتر ميشيم
من كه چيزي بلد نيستم اومدم از اساتيد ياد بگيرم

armstk
18-02-2012, 01:20
مهندس من پروگرامش كردم وقتي يو اس بي رو ميزنم هيچ عكس العملي توي ديوايس منيجر ديده نميشه .. (پاورشم وصله)
مهندس شکرریز اون دیپ سوییچ usben رو on میکنین؟

راستی اون ترانزیستور 8550 رو چی گذاشتی به جاش؟

sigma-mx
18-02-2012, 02:55
حالا اگه بوت لودره کار نکرد عیب نداره . سر فرصت روش حسابی کار می کنیم .
بجای 8550 می تونید bc807 بزارید .
مهندس شکر ریز تنها چیزی که در این مورد ( کانفیگ نشدن درست رجیستر CRL و CRH به ذهنم میاد همین کلاک سیستمه ! یه نکته اساسی کریستال روی برد رو چند گذاشتی ؟ با تنظیماتت تطبیق داره ؟ سعی کنید 8 بزارید . تو تمامی بردهای خودشون 8 هست . چون با ضرب و تقسیم با کلاک USB و بقیه چیزا جور در میاد .

alishekarriz
18-02-2012, 03:06
سلام


راستی اون ترانزیستور 8550 رو چی گذاشتی به جاش؟
راست گفتيد چيزي نبود جاش bd136 گذاشتم .. ديوايس منيجر شروع به شناسايي كرد ولي چيزي تشخيص نداد
unknown device
تنها تغيير كه در روشن شدن ميكرو داشت .. LED 6 به صورت نرم طي دو يا سه ثانيه روشن شد

كريستال هم 8 مگ هست با دوتا خازن 12 پيكو ولي خب ميدونيد كه ميكرو به صورت پيش فرض با كلاك 8 داخلي كار ميكنه مگر اينكه تنظيم كنيم روي خارجي

بی مخ!
18-02-2012, 10:47
با فلش لودر کار کردم قبلاً با همین stm پروگرمش کردم.
مشکلم اینه یکی دو تا قطعه کم دارم باس کلی بگردم اینجا (بیرجند) پیدا کنم

alishekarriz
21-02-2012, 19:31
خب دوستاني كه قبلا با مدلهاي ديگه ارم كارم كردن لطفا بيان وسط تدريس كنن يه مبحثي رو ..

پروژه رو كسي كار كرد؟

آقا مصطفي خبر رسيده شما lcd راه انداختي .. .. عكس بزار و شرح بده لطفا

Doloop
24-02-2012, 00:24
مهندس پروژت خیلی سخته البته برای شروع
ولی دارم روش کار میکنم:cry:
هرکی جواب گرفت مارو هم بی نصیب نزاره...:018:

alishekarriz
24-02-2012, 01:04
خب استاد هر مقدار كه نوشتي به اشتراك بزاري ما هم ياد ميگيريم و تكميل ميكنيم .. قصدمون همياري هست

كسي از دوستان برنامه اي نوشته يا ارسال كرده كه كار بكنه روي ميكرو؟!!

من برنامه رو پروگرام ميكنم اما اصلا اجرا نميشه .. معلوم نيست چه چيزي رو اجرا ميكنه .. بعضي وقتها توسط سيمولاتور پنجره GPIOA دستي كه تغيير ميدم ديودها روشن ميشن اما بعضي وقتها هم نميشن .. و در هر حالت برنامه توسط ميكرو اجرا نميشه

اين برنامه اي هست كه خودت keil داده



#include <stm32f10x_lib.h> // STM32F10x Library Definitions

/*------------------------------------------------------------------------------
wait - delay LED flashes
*------------------------------------------------------------------------------*/
void wait(){
unsigned int j = 300000; // define counter

while(j--); // count down
}

/*------------------------------------------------------------------------------
main
*------------------------------------------------------------------------------*/
int main(void) {
const unsigned int init_leds = 0x1; // define var
unsigned int leds = init_leds; // define var

while(1){ // loop forever
if (leds > 0x8000) leds = init_leds; // reset
GPIOA->ODR = (leds); // GPIOA->ODR defined in library
leds <<= 0x1; // shift group
wait(); // delay
}
}



شاد باشيم

sigma-mx
24-02-2012, 13:20
مهندس سلام . تا کجا پیش رفتین ؟ من حسابی سرم شلوغ شده و اصلا نمی رسم پیگیر کار بشم . البته برد رو هم هنوز نگرفتم ولی قطعات رو گرفتم !! الان که نگاه می کنم بچه ها رو اینجا نمی بینم ! آقای حسینا کجاست ؟ بقیه ؟ چرا همچی یهو ساکت شد ؟ فقط هدف ساخت برد بود ؟!! اصلا کسی نگفت مونتاژ کرده و کار می کنه !
به هر حال یه نگاهی به برنامه انداختم . فکر کنم تابع init رو جا انداخته بودی اگه اشتباه نکنم ! این فایلو یه تست کن . فقط من نمی دونم led های شما سر کدوم پورته ، یه چک کن اتصال نشه .

alishekarriz
24-02-2012, 16:45
سلام

برد رو نگرفتي ؟!! يعني پست نرسونده؟!!

برنامه كه درسته چون مثال خود help هست.. چند نفري گفتن مثل من مونتاژ كردن و فكر كنم همه رفتن خونه تكوني .. والا چي بگم ..
بردها كه همه مثل همه A1-A2-A3 مربوط به LED هست

دوستاني كه قبلا آرم كار كردن خيلي بهتر ميتونن كار كنن من كه دفعه اولمه و ميكرو مثل بچه ادم كار نكرده فقط بدون هيچ مشكلي پروگرام ميشه ولي از اجرا خبري نيست ..
البته گفتم توسط ديباگر كيل ميتونم LED رو خاموش و روشن كنم اما خودش مطابق برنامه نميشه ..

تعجب ميكنم چه وقتي كانفيگ پورت روي خروجي تنظيم شده باشه چه نشده باشه
با دستور

GPIO->CRL=0x22222222;
و به صورت پيش فرض ورودي هست .. با 44444444
اگر در به جاي جيلينك از شبيه ساز استفاده كنيم برنامه شبيه ساز پورت خروجي رو تغيير ميده؟!!! اما عملا نه

اقا وقتي به ميكرو وصل ميشه اجرا نميشه فقط شبيه سازي ميكنه

من هيچ جواب مستقلي از اين برد نگرفتم فقط از توي ديباگر كنترل دستي ميشه

sigma-mx
24-02-2012, 22:43
مهندس من که برد رو خودم طراحی کرده بودم ! یادت نیست ؟! هنوز ندادم برای چاپ ..

یعنی این فایلی هم که فرستادم کار نکرد ! ببینم اصلا کسی تا حالا برنامه ای رو ، روی این برد ران کرده ؟

alishekarriz
24-02-2012, 23:21
اين فايل شما در شبيه سازي كار ميكنه با اينكه كانفيگ پورت رو با دستور GPIOA->CRL=0x22222222; به خروجي تبديل نكردي در شبيه ساز كار ميكنه اما در ديباگر و خود برد كار نميكنه

مهندس بساز ديگه شما كه خيلي جلوتر بودي ..

يكي از دوستان كه برنامه رو روي برد اجرا كرده و ديباگ هم درست كار ميكنه خبر بده چهارتا عكس از محيط برنامه بندازه .. پروژه روهم بفرسته لطفا

Doloop
24-02-2012, 23:48
اقا برد منم جواب نداده ؟ لااقل تا الان !!!
مهندس سیگما شما یکسری فراخوانی انجام داده بودی ولی من بدون اونم تو دیباگر جواب گرفتم.

فکر کنم تابع init رو جا انداخته بودی اگه اشتباه نکنم
قضیه چیه؟اینا حتما لازمه؟
این برنامه منه...



#include <stm32f10x.h>

int main (void)
{

unsigned long i=0;

GPIOA->CRL =0x00000006;
GPIOA->CRH =0x00000000;

while(1)
{
GPIOA->BSRR =0xffff0000;
for(i=0;i<2000000;i++);
GPIOA->BSRR =0x0000ffff;
for(i=0;i<2000000;i++);
}
}

کسی نفهمید مشکل از کجاست؟
به نظر من یه دستورایی کم داره که میکرو بدون اونا کار نمیکنه!!!
حالا چیه خدا میدونه؟

sigma-mx
25-02-2012, 00:01
قضیه اون تابع init اینه که کل مدار اسیلاتور و این برنامه ها باید از طریق نرم افزاری اجرا بشه . البته من چند روش مختلف تا حالا دیدم !
مثلا برای کانفیگ و کلی چیزای دیگه می تونید از فایل STM32_Init همراه برنامه استفاده . یه ویزارد خیلی بدرد بخوره ! کلی چیزا رو میشه باهاش بدون دستور تنظیم کرد . نمی دونم تا حالا کسی باهاش کار کرده ؟!

alishekarriz
25-02-2012, 00:13
اقا خب يه برنامه كامل و اجرا شده يكي بزاره ..
تنظيم فركانس كه داخلي هست و مشكلي نيست
تنظيم فركانس پورت خروجي رو با فركانس داخلي ميكنيم
تنظيم pll رو هم با پيش فرض كه 4 برابر هست خوبه
حالا كلاك برنامه چطوري ميتونيم بگيم كه همون فركانس داخلي يا pll باشه

يك تنظيم حداقل ولتاژ ورودي هم هست كه دوستان يادمون باشه جامپرش روبراي اتصال به 3.3 وصل كنيم
تنظيم پورت روي خروجي با 22222222 لازمه
جالبيش اينه كه به جايODR
IDR تغيير ميكنه

از اساتيد آرم كسي نيست يه كمكي كنه !

sigma-mx
25-02-2012, 00:30
راستی شما همه قطعات رو مونتاژ کردی ؟ چیزایی که مربوط به میکرو میشه رو چک کن . تغذیه ، ریست ، جامپر boot ، .....

kavir
25-02-2012, 01:07
سلام
این برنامه رو تست بزن

Doloop
25-02-2012, 01:36
مهندس دستت درد نکنه
من led شو تست کردم جواب نداد
اونم روی پورت a بود ولی همونه که همونه...
بقیه هم تست کنن شاید من یه جایی اشتباه کردم..!!!

sigma-mx
25-02-2012, 01:55
ای بابا ! اسیلاتور که داخلیه . دیگه چیزی نداره . مشکل از چیه پس ! وقتی تو سیمولاتور کار میکنه باید تو عمل هم کار کنه دیگه !

sigma-mx
25-02-2012, 02:05
آقا یه چیزم چک کنید . اون دیپ سوییچ مشترک Boot/USB . حالت Boot باید صفر باشه . یعنی کلید باید روشن باشه . اگه جدول تنظیم بوت رو از manual نگاه کنید ، تنها وقتی که پایه boot0 مقدارش صفر باشه فلش میکرو لود میشه !

You can see links before reply

alishekarriz
25-02-2012, 08:44
سلام
این برنامه رو تست بزن

مهندس اين برنامه كه سيمولاتورش هم كار نكرد چه برسد به ميكرو

برنامه اي هم كه pm داديد اثري نداره .. نميدونم چي بگم همه بردها نميتونه خراب باشه ..ميتونه ؟!


تنها وقتی که پایه boot0 مقدارش صفر باشه فلش میکرو لود میشه !

من هر چي حالت روي برد ميشه پيدا كرد تغيير ميدم ...
اجراي ميكرو يك طرف .. تغيير نكردن كانفيگ پورتها هم يك طرف .. ميكرو وابسته به ولتاژ باطري هست و جامپرش و نوع بوت و تنظيم كلاك و ..

چه محدوديتهايي داره تا اجرا بشه ؟!!

Doloop
25-02-2012, 12:32
سلام مهندس
یه قضیه دیگه هم هست که چرا پایه های پورت a همشون مثل اینکه پول آپ شده (3.3v)ولی پورت های دیگه نه.!!!
نمیدونم ولی شاید چون من با پورت a کار کردم اینطوری شده
خوب پس حالا باید هرطور شده پورت a صفر بشه تا دیود روشن شه؟!!!
کسی میدونه چطوری میشه پورت رو pull down کرد.

sigma-mx
25-02-2012, 12:59
مهندس doloop ، اینکه به حالت pull up در اومده یعنی ورودیه. باید اونو تو حالت output push-pull ببری تا خروجی بشه . برای راحتی کار از اون فایل ویزارد استفاده کن و همه رو خروجی کن . تو برنامه هم فقط سعی کن مثلا A0 رو بتونی روشن کنی . حداقل معلوم بشه سیمولاتور داره بازی در میاره یا میکرو ! اصلا کد از روی میکرو اجرا میشه یا نه ؟! سعی کن با اسیلاتور هم ور بری شاید از اون باشه . مرسی

Doloop
25-02-2012, 13:16
خوب مهندس من تو برنامه خروجی تعریف کردم حتی دیباگ هم میکنم مقدار خروجی در حال تغیر هست
ولی بعد از پروگرم کردن فهمیدم پایه ها پول آپ
خوب الان برنامرو از تو چیپ پاک کردم که بازم پول آپ شده هست اگه فرض کنیم پیشفرض پایه ها پول آپه چرا فقط پورت a اینطوریه و بقیه پورت ها (1.2v)
یه جای کار میلنگه یا میکرو پروگرم شده و تغیر نمیکنه یا اصلا پروگرم نمیشه
البته با جیلینک که پیغام میده پروگرم با موفقیت انجام شد.
....؟؟!!!!!



#include <stm32f10x.h>

int main (void)
{
unsigned long i=0;

GPIOA->CRL =0x00000006;
GPIOA->CRH =0x00000000;

while(1)
{
GPIOA->ODR =0x00000000;
GPIOA->IDR =0x00000000;
GPIOA->BSRR =0xffff0000;
for(i=0;i<2000000;i++);
GPIOA->BSRR =0x0000ffff;
for(i=0;i<2000000;i++);
}
}

sigma-mx
25-02-2012, 14:33
یه جای کار میلنگه یا میکرو پروگرم شده و تغیر نمیکنه یا اصلا پروگرم نمیشه
البته با جیلینک که پیغام میده پروگرم با موفقیت انجام شد.

مهندس با بوت لودر سریال هم یه تست بزن که معلوم بشه ایراد از پروگرامه یا نه ؟ والا به این جیلینک کلون نمیشه اعتماد کرد !
طبق دیتاشیت پیش فرض پورتها Input Floating هست .
آخر کسی پیدا نشد از اونایی که برد گرفتن ، بگن تا حالا چیزی ران کردن یا نه ؟!!! فقط همین ، بله یا خیر !!:unh:

Doloop
25-02-2012, 16:47
خوب مهندس یه مشکل دیگه من تا حالا با بوت لودر کار نکردم:mrgreen:
منظورت همون سمبا میشه دیگه درسته؟
اگه اینه که مثل اتمل یا نه فرق داره؟

alishekarriz
25-02-2012, 16:58
مهندس بعيده از پروگرامر باشه . .. هنوز.. مسئله اينجاست كه به طور دستي از محيط ديباگ ميشه پورت رو خاموش روشن كرد ولي برنامه اجرا نميشه ..

يه جايي محيط گرافيكي نيست تنظيمات كلاك و خروجي به صورت ويزارد مثل avr تعريف بشه !؟!

كاش شما كه بردت رو خودت طراحي كردي .. زودتر راه مينداختيش تا دو نوع برد داشته باشيم براي تست

Doloop
25-02-2012, 17:19
میگم ما ده تا برد به ده نفر دادیم!!!
پس بقیه کجان...
مهندس حسینا
مهندس بی مخ:)
و...

Doloop
25-02-2012, 18:46
مهندس سیمولاتور هم داره بازی در میاره..!!!:brk:
ببینید توی برنامه زیر هم بیت های ورودی تغیر میکنه هم خروجی ولی وقتی پورت رو ورودی تعریف میکنم فقط خروجی تغیر میکنه
دارم کم کم به دیتا شیت شک میکنم..!!
شما این برنامرو دیباگ کن بگو چی دیدی؟؟
تشکر



#include<stm32f10x.h>

int main (void)
{

int i=0;

GPIOA->CRL =0x00002220;
GPIOA->CRH =0x00000000;

while(1)
{
GPIOA->BRR = 0x0000ffff;
GPIOA->ODR = 0x00000000;
for(i=0;i<800000;i++);
GPIOA->ODR = 0x0000000E;
for(i=0;i<500000;i++);
}
}

:cry::cry:8O8O:x:x:(:(:unh::unh:cry::cry::

sigma-mx
25-02-2012, 18:53
خوب مهندس یه مشکل دیگه من تا حالا با بوت لودر کار نکردم:mrgreen:
منظورت همون سمبا میشه دیگه درسته؟
اگه اینه که مثل اتمل یا نه فرق داره؟ سمبا که از طریق USB بود . این رو خودش بوت لودر پورت سریال داره . برای کار باهاش باید از جامپر های BOOT0 و BOOT1 استفاده کنی. کاری نداره یه کلید رو باید بالا پایین ببری تا بوت لودر لود بشه . تو Reference Manual کاملا توضیح داده . راستی این PDF رو حتما دانلود کنید . برای کل سری STM32 هست . همچی رو توش توضیح داده.



يه جايي محيط گرافيكي نيست تنظيمات كلاك و خروجي به صورت ويزارد مثل avr تعريف بشه !؟!مهندس مگه من توی چند تا پست اخیرم هی نمیگم از ویزارد استفاده کنید بهتره ! منظور منو نگرفتید . مگه فایل ویزارد رو ندارید ؟! فایل STM32_Init.C رو میگم . براتون میزارم . از سیر تا پیاز رو با ویزارد میشه انجام داد بصورت گرافیکی ! حتی کانفیگ پورت رو .




كاش شما كه بردت رو خودت طراحي كردي .. زودتر راه مينداختيش تا دو نوع برد داشته باشيم براي تست مهندس فکر می کنی من دلم نمی خواد . اینقدر کار ریخته سرم که .... باید بشینم بازم یه چک نهایی کنم برد رو که با این وضع یبار اشتباه نشه ! تا قبل عید می رسه هر چی هست ، ولی فکر می کردم تیم شما بشینه رو برد کار کنه ! بجز شما دوتا معلوم نیست بقیه چی شدن !؟ موندم این مهندس حسینا که ایده این میکرو و برد رو داد کجاست !؟ حتما داره بهش خیلی بیشتر از اینجا خوش میگذره :0013:

alishekarriz
25-02-2012, 19:06
در اخرين مشاهدات .. مهندس حسينا داشت پول پارو ميكرد .. بعدم با پاروش رفت اسباب كشي

اين ويزارد در پروژه اي كه گذاشته بوديد هست.. فقط من نميدونم محيط گرافيكش كجاشه .. لطفا اگر مقدور هست چند تصوير اموزشي بزاريد

من به سالم بودن همه آي سيها شك ميكنم اگر بخواد اينطوري پيش بره ..



شما این برنامرو دیباگ کن بگو چی دیدی؟؟

اين اصلا كامپايل نميشه خطا ميده


#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
#endif

اما وقتي اين تابع
#include <stm32f10x_lib.h> رو استفاده ميكنم .. كامپايل ميشه و ديگر هيچ ..حتي با دست هم در ديباگر به خروجي نميشه دستور داد!!

راستي مهندس شاگرد نميخواهي؟!! بچه خوبي هستما

sigma-mx
25-02-2012, 19:14
اين ويزارد در پروژه اي كه گذاشته بوديد هست.. فقط من نميدونم محيط گرافيكش كجاشه .. لطفا اگر مقدور هست چند تصوير اموزشي بزاريد
نکته انحرافیش همین جاست :o منم اول ندیده بودم ! وقتی فایل رو باز میکنی پایینشو نگاه کن دو تا تب داره یکی نوشته Text Editor و سمت راستش نوشته Configuration Wizard . تو این پنجره ویزارد هست !

You can see links before reply

sigma-mx
25-02-2012, 19:25
اين اصلا كامپايل نميشه خطا ميده


#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
#endif
خب عزیزان بایدم error بده . پس چرا برای من error نمی ده !؟ فایل stm32f10x.h برای کل سری stm32f1 هست . خب باید مشخص بشه کدوم سری محصول رو دارید کار می کنید !
فایل stm32f10x.h همراه پروژه رو باز کنید . اولای فایل دنبال این عبارات بگردید




/* Uncomment the line below according to the target STM32 device used in your
application
*/

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
/* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
#define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */
/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
/* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */
/* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */
/* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif


و این عبارت رو از کامنت در بیارید :


define STM32F10X_MD#

Doloop
25-02-2012, 20:22
راستی این PDF رو حتما دانلود کنید .
سلام مهندس من اول دنبال PDF میگشتم ببینم کجاست فکر کردم لینک دادی.
منظورت همون reference manual بود؟
باید از تو سایت st دانلود کنم درسته؟


#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file

مهندس ارور این بود فکر کنم پروژه جدید نساختی همینطوری کپی کردی درسته!!!
اول یه پروژه درست کن بعد برنامرو توش کپی کن.
جسارته البته ارور اینو میگه!!!
راستی شما میکرو رو تو کیل چی انتخاب میکنید؟
من stm32f103RB رو انتخاب میکنم.
درسته؟

alishekarriz
25-02-2012, 20:39
خب من داشتم خبر شادي افرين ميدادم اينترنت قطع شد

تا قطع نشده بگم كه :o:018::125:
در يك اقدام قافلگير كننده كلاك سيستم رو از داخلي به خارجي تغيير دادم و تنظيماتي كه مهندس گفت از فايل STM32_Init.C انجام دادم

و اكنون برد در حال شادي و نور افشاني هست .. اشك نميزاره اين گزارش رو ادامه بدم... :(

You can see links before reply
دوستان تست كنند و نتيجه را بگويند



#include <stm32f10x_lib.h>
#include "STM32_Init.h"
//#include<stm32f10x.h>


int main (void)
{

int i=0;
stm32_Init();


while(1)
{
// GPIOA->BRR = 0x0000ffff;
GPIOA->ODR = 0x0000000a;
for(i=0;i<500000;i++);
GPIOA->ODR = 0x00000005;
for(i=0;i<700000;i++);
}

}

sigma-mx
25-02-2012, 20:44
سلام مهندس من اول دنبال PDF میگشتم ببینم کجاست فکر کردم لینک دادی.
منظورت همون reference manual بود؟
باید از تو سایت st دانلود کنم درسته؟
آره منظورم از این .. همین STM32 Reference Manual بود . یه سرچ کنی پیداش می کنی .


مهندس ارور این بود فکر کنم پروژه جدید نساختی همینطوری کپی کردی درسته!!!
اول یه پروژه درست کن بعد برنامرو توش کپی کن.
جسارته البته ارور اینو میگه!!!
راستی شما میکرو رو تو کیل چی انتخاب میکنید؟
من stm32f103RB رو انتخاب میکنم.
درسته؟
من اینقدر این کیل رو دستکاری کردم که بعضی چیزاش از کار افتاده ! به هر حال با این کار این ارور از بین میره و مطالبی هم که نوشتم رو از اون چند خط تو کتابخانه گفتم . حرف خودم نیست . دیدی که اولش نوشته :
Uncomment the line below according to the target STM32 device used in your application میکرو هم همون stm32f103RB هست .

sigma-mx
25-02-2012, 20:45
خب من داشتم خبر شادي افرين ميدادم اينترنت قطع شد

تا قطع نشده بگم كه :o:018::125:
در يك اقدام قافلگير كننده كلاك سيستم رو از داخلي به خارجي تغيير دادم و تنظيماتي كه مهندس گفت از فايل stm32_init.c انجام دادم

و اكنون برد در حال شادي و نور افشاني هست .. اشك نميزاره اين گزارش رو ادامه بدم... :(

مهندس دمت گرم . خیالمو راحت کردی :018::018::018::018:

alishekarriz
25-02-2012, 20:54
مهندس دمت گرم . خیالمو راحت کردی :018::018::018::018:

خب به نظر دوستان اين كلاك داخلي چرا بازي در اورده .. تنها چيزي كه من تغيير دادم يك مقاومتهست كنار پتانسيومتر گذاشته شده R1 روي مدار 10 اهم زده بود ..من گفتم اشتباه گذاشتم 10 كيلو .. البته الان با يك مقاومت 10 اهم ارتباط دادم ولي تغيير نكرد

ديگه چي؟

استاد اون تغيير توي stm32f10x.h رو ندادم .. به نظرم دستكاري داخل فايلهاي اصلي تا جايي كه ميشه نبايد بشه .. البته نميدونم

alishekarriz
25-02-2012, 21:12
دوستان من يكم ديگه ور رفتم ديدم تنها وابستگي به اين دوتا دايره قرمز كوچك هست

جالب اينجاست كه در بيضي بالايي اصلا HSI وجود نداره ! چرا؟

و چرا با وجود تنظيم كلاك روي HSI سيستم به راحتي كار ميكنه ولي حتما بايد HSEON فعال باشه ؟؟!

You can see links before reply

aa)بزن كف قشنگه رو براي مهندس كه اولش گفت از كلاك سيستم بايد باشه خطا aa)

sigma-mx
25-02-2012, 21:35
با توجه به شماتیک برد شما مقاومت R1 مربوط به BOOT1 هست و برای این گذاشته که اگه سهوا خروجی شد پورت میکرو مستقیما با زمین اتصال نکنه ! مقدارش زیاد فرقی نمی کنه . به هر حال عامل خارجی نمی تونه باعث کار نکردن اسیلاتور داخلی باشه . فکر کنم تنظیمات برای اسیلاتور داخلی صحیح نبوده . حالا زیاد مهم نیست .فعلا با همین خارجی کار کردن بهتره ! مهندس اگه یادت باشه چندین پست قبل گفتم هر چی هست از کلاک سیستمه ! گفتم ببین کلاک enable شده یا نه ! فکر کنم تنظیمات کلاک و PLL و ... رو تو حالت دیباگ بشه دید . برای اطمینان از انواع کلاک های سیستم لازمه .
در مورد تغییر تو فایل هدر گفتم اگه گیر کردی راهش اینه . البته اگه بری با CMSIS کار کنی راه دیگه ای نداری . اونجا دیگه خبری از ویزارد هم نیست . همچی با توابع و کتابخانه راه میوفته مخصوصا اسیلاتور و کلاک سیستم ! حتی بعضی از فایل ها هم تو CMSIS که به پروژه اضافه میکنی ممکنه احتیاج به تغییر داشته باشه . اونایی که نباید بهشون دست زد رو روشون عکس قفل زده و نمیشه تغییرشون داد ( فایلشون Read Only ) شده .

sigma-mx
25-02-2012, 21:47
مهندس همچی درسته و جور در میاد . PLLXTPRE کلا مربوط به اسیلاتور خارجیه و PLLSRC مربوط به ورودی PLL هست که از کدام منبع کلاک بگیره . شکل زیر کلاک سیستم رو کاملا توضیح میده ..

You can see links before reply

pooriya
25-02-2012, 21:49
خب من داشتم خبر شادي افرين ميدادم اينترنت قطع شد

تا قطع نشده بگم كه :o:018::125:
در يك اقدام قافلگير كننده كلاك سيستم رو از داخلي به خارجي تغيير دادم و تنظيماتي كه مهندس گفت از فايل STM32_Init.C انجام دادم

و اكنون برد در حال شادي و نور افشاني هست .. اشك نميزاره اين گزارش رو ادامه بدم... :(

You can see links before reply
دوستان تست كنند و نتيجه را بگويند



#include <stm32f10x_lib.h>
#include "STM32_Init.h"
//#include<stm32f10x.h>


int main (void)
{

int i=0;
stm32_Init();


while(1)
{
// GPIOA->BRR = 0x0000ffff;
GPIOA->ODR = 0x0000000a;
for(i=0;i<500000;i++);
GPIOA->ODR = 0x00000005;
for(i=0;i<700000;i++);
}

}

با سلام

دوستان شرمنده سرم یه جوری شلوغ شده که اصلا بردم رو گم کردم.:mrgreen:
مهندس این فایل پروژه یا hex تست شده رو قرار بدین ما هم پروگرم کنیم ببینیم چه خبره؟
با تشکر

alishekarriz
25-02-2012, 21:50
مهندس كلاك داخلي فعال هست و الان طبق همون عكس من كلاك سيستم رو با كلاك داخلي تنظيم كردم ..اما فعال نبودن كلاك خارجي باعث كار نكردن مدار ميشه .. عجيبه .. من كه اولين باره آرم مي بينم شما كه تجربه داريد يه فكري بكنيد

خب حالا چه كار كنيم ؟!

يكي بياد درس بده لطفا


مهندس همچی درسته و جور در میاد

مهندس يعني بدون كريستال ميشه كار كرد اصولا يا نميشه .. حتما بايد كريستال داشته باشيم چه تنظيمي كنيم تا بدون كريستال راه بيوفته؟!


اينم پروژه تست شده

sigma-mx
25-02-2012, 21:51
آقا راستی هر کدوم از بردتون یه عکس بزارید ببینیم ! :o

sigma-mx
25-02-2012, 21:58
مهندس كلاك داخلي فعال هست و الان طبق همون عكس من كلاك سيستم رو با كلاك داخلي تنظيم كردم ..اما فعال نبودن كلاك خارجي باعث كار نكردن مدار ميشه .. عجيبه .. من كه اولين باره آرم مي بينم شما كه تجربه داريد يه فكري بكنيد

خب حالا چه كار كنيم ؟!
مهندس این کارا رو کردی ؟
You can see links before reply

طبق اون نمودار پیش بری هیچ وقت اشتباه نمی کنی ( پست 93 ) . از HSI حرکت کن تا به SYSCLK برسی ! ببین تو راه چیا باید تغییر کنه .
اگه این تنظیمات رو اعمال کنی باید 36MHz کلاک سیستمت بشه . اینم بخاطر اینه که ورودی PLL برای HSI تقسیم بر دو هست . چیز خاصی نیست انشالله راه میوفته . ممنون از پیگیریتون ..

Doloop
25-02-2012, 22:19
مهندس من برنامه شما رو تو پروژم کپی کردم این ارور رو داد یعنی چی؟؟؟



Build target 'Target 1'
compiling main_stm32f103.c...
main_stm32f103.c(2): error: #5: cannot open source input file "STM32_Init.h": No such file or directory
main_stm32f103.c: #include "STM32_Init.h"
main_stm32f103.c: ^
main_stm32f103.c: main_stm32f103.c: 0 warnings, 1 error
Target not created

Doloop
25-02-2012, 22:23
مهندس فایلت خرابه بد زیپ شده یکار دیگه بکن سریع!!:018:
منم میخام روشن خاموش شدن led هارو ببینم!!:018:

alishekarriz
25-02-2012, 22:28
چیز خاصی نیست انشالله راه میوفته . ممنون از پیگیریتون ..

استاد راه افتاد .. Hsi/2 رو نديده بودم .. خيلي ممنون از پيگيري و راهنمايي شما

الان بدون كلاك خارجي داره كار ميكنه ..

مهندس فايل 7zip هست دوباره ميزارم براتون

حالا چه كنيم

Doloop
25-02-2012, 22:30
منم میخامcry::

alishekarriz
25-02-2012, 22:37
استاد راه افتاد .. Hsi/2 رو نديده بودم .. خيلي ممنون از پيگيري و راهنمايي شما

الان بدون كلاك خارجي داره كار ميكنه ..

مهندس فايل 7zip هست دوباره ميزارم براتون
ایـــــــــران میـــــــکرو ™ (You can see links before reply)

حالا چه كنيم

sigma-mx
25-02-2012, 22:45
استاد راه افتاد .. Hsi/2 رو نديده بودم .. خيلي ممنون از پيگيري و راهنمايي شما
الان بدون كلاك خارجي داره كار ميكنه ..
استاد چیه بابا ما هم در حال یادگیری هستیم ! با هم داریم یاد میگیریم .
خب به سلامتی . چیزی که روشنه همه باید شروع کنیم با دیتاشیت کم کم پیش بریم . البته همین بخش gpio و afio رو می تونیم کامل کنیم + دستورات cmsis مربوط و این خودش کلی کاره .
شما با همین io میتونی کلی چیز راه بندازی . مثلا lcd
فکر نکنم دیگه مشکل کلاک داشته باشیم . راستی شما پروگرام با بوت لودر رو تست کردین ؟

alishekarriz
25-02-2012, 22:53
باباي در حال يادگيري .. :0013:

من فقط با جيلينك كار كردم .. كابل لازم براي پروگرام كردن يه RS32 هست كه 5-5 و 2-3 پينهاش وصل شده ؟

برنامشم ندارم ..

منظورتون همين بود .. استاد

اگر ممكنه همين برنامه رو يه تشريح اساسي بكنيد ..



#include <stm32f10x_lib.h>
#include "STM32_Init.h"
//#include<stm32f10x.h>

int main (void)
{
int i,j;
stm32_Init();
while(1)
{
GPIOA->ODR = 10;
for(i=0;i<200000;i++);
GPIOA->ODR = 5;
for(i=0;i<300000;i++);
}
}


البته منظورم همه پروژه هست .. از فايلهاي اضافه شده به پروژه تا تنظيمات و كانفيگ

اگر بشه اين برنامه رو كامپايل دستي كنيد كه عالي ميشه lov:.. ميشه اسمبليشو بنويسيم؟ :018:

راستي اوندفعه كه اينترنت قطع شد داشتم ميگفتم
استاااد توي پروژتون جاروكش نميخواهيد؟! بلدما

pooriya
25-02-2012, 23:00
با سلام

با تشکر از همه دوستان برد منم تو اولین پروگرم توسط برنامه ای که دوستان گذاشتن کار کرد(دم دست دوربین با کیفیت ندارم واگرنه عکس می ذاشتم)
با تشکر از دوستان و شرمنده که تا یه مدت کوتاه نمی تونم همکاری کنم.
ولی سعی خواهم کرد با کتابخونه های cmsis کار کنم.

Doloop
25-02-2012, 23:15
منم بوردم کار کرد دم همگی گرم مخصوصا داداش سیگما و مهندس شکرریز که واقعا زحمت کشیدید
کسی نگفت ایراد برنامه من چی بود که این ارور رو داد


Build target 'Target 1'
compiling main_stm32f103.c...
main_stm32f103.c(2): error: #5: cannot open source input file "STM32_Init.h": No such file or directory
main_stm32f103.c: #include "STM32_Init.h"
main_stm32f103.c: ^
main_stm32f103.c: main_stm32f103.c: 0 warnings, 1 error
Target not created

sigma-mx
25-02-2012, 23:41
کسی نگفت ایراد برنامه من چی بود که این ارور رو دادمهندس فکر کنم فایل هدر رو تو آدرس پیدا نمی کنه ! ببین این فایل کجاست و این فایل رو add کن بجای اون یکی .


من فقط با جيلينك كار كردم .. كابل لازم براي پروگرام كردن يه RS32 هست كه 5-5 و 2-3 پينهاش وصل شده ؟

برنامشم ندارم ..آره عزیز همینه . برنامش هم از اینجا بردار

You can see links before reply

اینم تست کن شاید یبار بدرد خورد .


اگر ممكنه همين برنامه رو يه تشريح اساسي بكنيد ..
البته منظورم همه پروژه هست .. از فايلهاي اضافه شده به پروژه تا تنظيمات و كانفيگ
اگر بشه اين برنامه رو كامپايل دستي كنيد كه عالي ميشه lov:.. ميشه اسمبليشو بنويسيم؟ :018:
مهندس این دیگه کفشه ! از این پایه تر نداره ! میخوای کاپوت میکرو رو بزنیم بالا توش 0 و 1 بنویسیم ! :0013:





#include <stm32f10x_lib.h>
این هدر با توجه به مواردی که احتیاج داریم از کتابخانه های مربوط تابع فراخوانی میکنه
#include "STM32_Init.h"
ویزارد تنظیمات میکرو
int main (void)
{ int i;
//
stm32_Init();
تنظیم کلاک و منابع سیستم از طریق نرم افزاری . در صورت استفاده از ویزارد این لازم نیست .
while(1) { GPIOA->ODR = 10;
پین های 1 و 3 روشن
for(i=0;i<200000;i++);
تاخیر
GPIOA->ODR = 5;
پین های 0 و 2 روشن
for(i=0;i<300000;i++);
تاخیر } }

خوشحالم برد همه راه افتاد . خسته نباشید .:o

sigma-mx
26-02-2012, 01:34
راستي اوندفعه كه اينترنت قطع شد داشتم ميگفتم
استاااد توي پروژتون جاروكش نميخواهيد؟! بلدما
مهندس می خوای ما رو از نون خوردن بندازی ! پس خودم چیکار کنم :018:

Doloop
26-02-2012, 13:34
مهندس من هنوز با این دستور مشکل دارم
پروژه ای که من خودم درست میکنم کامپایل نمیشه
این ارور رو میده


Build target 'Target 1'
linking...
main-test-stm32f103.axf: Error: L6218E: Undefined symbol STM32_Init (referred from led-test.o).
main-test-stm32f103.axf: Not enough information to list image symbols.
main-test-stm32f103.axf: Not enough information to list the image map.
main-test-stm32f103.axf: Finished: 2 information, 0 warning and 1 error messages.
Target not created


قضیه چیه؟؟؟
همه فایل های پروژه مهندس شکرریز رو هم کنار پروژه خودم کپی کردم ولی جواب نمیده
با این دستور مشکل داره..!!!



STM32_Init();

حتی حروف بزرگ و کوچک رو هم در نظر گرفتم و تغیر دادم ولی بازم همونه؟؟!!!:(

sadmonew
26-02-2012, 14:02
سلام دوستان گلم:hi:
مهندس ميتونيد فايل پروژه اي كه خودتون درست كردين رو اينجا بذاريد تا ما هم كامپايلش كنيم.
تا ببينيم اين ارور از كجا مياد؟ چرا ارور ميگيره؟
پروژه اي مهندس شكرريز تو پست شماره 100 گذاشتن بدون ارور كامپايل ميشه.

Doloop
26-02-2012, 14:25
چشم
اینم پروژه من البته چندتا فایل رو هم از پروژه مهندس شکرریز کپی کردم
اینم عکس بورد من البته کیفیت خوبی نداره...!!!
You can see links before reply

sadmonew
26-02-2012, 14:32
چشم
اینم پروژه من البته چندتا فایل رو هم از پروژه مهندس شکرریز کپی کردم

سلام مهندس
دستت درد نكنه. اما لطف كن يه بار ديگه پروژه رو آپلود كن. ايني كه گذاشتي مشكل داره.

Doloop
26-02-2012, 14:51
اینم هم فایل zip
وهم فایل rar که داخلش 7zip
اینم دوباره..!!!

sadmonew
26-02-2012, 16:06
سلام مهندس
حالا پروژه شما بدون ارور كامپايل ميشه.
شما هم كامپايلش كنيد، ببينيد رو بردتون جواب ميده؟
من هنوز قطعات بردمو اسمبل نكردم.(قطعه اي خريداري نكردم.)

Doloop
26-02-2012, 16:35
یه سوال؟؟؟ii998)
اون IDC که کنار JTAG هست برای چیه؟
من هرچی تو جمهوری گشتم 2*11 IDC پیدا نکردم.
فعلا جاش پین هدر گذاشتم ولی لحیم نکردم.

armstk
26-02-2012, 19:32
اون idc که کنار jtag هست برای چیه؟
من هرچی تو جمهوری گشتم 2*11 idc پیدا نکردم.
این باکس 2*11 رو من که تا حالا ندیدم و بعید هم میدونم تو بازار میشه , که جاش میتونین پین هدر دوبل بزارین
من خودم هم پین هدار میخام بزارم که lcd رو هم راحت بشه با یک پین هدر نری وصل کرد بهش

armstk
26-02-2012, 19:40
راستی مهندس do...loop شما اون سوکت مموری کارت کوتاه رو از کجایه تهرون گرفتین؟!!

alishekarriz
26-02-2012, 20:10
خب دوستان ادامه پروژه رو بريم ديگه ..

قرار بود هر كدوم از LED ها با فركانس مختلف كار كنه و زمان روشن شدن به خاموش شدن همشون با پتانسيومتر تغيير كنه :0013:

دوباره نريد بگيد هنوز تموم نشده .. هر قسمتي كه نوشتيد بياييد به اشتراك بزاريم لطفا
:wink:

Doloop
26-02-2012, 20:20
راستی مهندس do...loop شما اون سوکت مموری کارت کوتاه رو از کجایه تهرون گرفتین؟!!
سلام مهندس
اگه اشتباه نکنم پاساژ عباسیان سمت چپ یه مغازه هست که فقط یه پنجره باز کرده و از اونجا قطعات رو میفروشه شبیه باجه بانک
باکس سوکت مموری هاشو گذاشت جلوم گفت هر کدومو میخای بردار منم گشتم اینو توش پیدا کردم
البته بوردم هم پیشم بود تست کردم دیدم خودشه.

alishekarriz
26-02-2012, 21:57
چشم
اینم پروژه من البته چندتا فایل رو هم از پروژه مهندس شکرریز کپی کردم
اینم عکس بورد من البته کیفیت خوبی نداره...!!!
You can see links before reply

آقا اون led قرمز كنار 3232 براي من روشن نشده از اول .. براي شما كي روشن ميشه ؟ البته الان كه مي بينم روشنه ولي خيلي خيلي كم نور .. مگه متقارن با بغليش نيست ؟ كار اين دوتا LED چيه ؟

دوربينت هم بي كيفيت نيست .. فوكوس كن خب .. اسم گوشي يا دوربينت رو بگو

دوستان براي فوكوس روي اشياء نزديك با موبايل (يا هر دوربيني) يه ذره بين رو بچسبونيد به دوربين و عكس بگيريد در ضمن براي فعال شدن اتوفوكوس دكمه دوربين رو دو مرحله اي يا به ارامي فشار بدهيد

Doloop
26-02-2012, 22:09
آقا اون led قرمز كنار 3232 براي من روشن نشده از اول .. براي شما كي روشن ميشه ؟
برای من از همون اول روشن میشد وقتی تغذیه مدارو یا جیلینک رو وصل میکنم روشن میشه
ولی نورش نسبت به بقیه کمتره
گوشیم nokia c7 فوکوس هم نداره
الان ذره بین رو تست میکنم
دمت گرم عجب چیزی بود:o
مهندس من هنوز با این اروره مشکل دارم خودم فکر میکنم توی تعریف پروژه تو قسمت target مشکل دارم

Doloop
26-02-2012, 22:16
راستی جناب مهندس صادق محمدی داداش شما مشکل رو حل کردی ولی نگفتی ایراد کار من کجا بود؟:hi:
برنامه چی کم داشت؟:wink:
...

alishekarriz
26-02-2012, 22:23
دوستان چه روشهايي ميشناسيد كه پورت رو كم نور و پر نور كنيم ؟!!

اين برنامه رو من نوشتم ولي جوابي كه فكر ميكنم نميده !!



int main (void)
{
int i,j;
stm32_Init();
while(1)
{
for(j=1;j<100000;j++)
{
for(i=1;i<j;i++)
GPIOA->ODR = 5;
for(i=100000;i>j;i--)
GPIOA->ODR = 10;
}
}
}

Doloop
26-02-2012, 22:34
خوب برای این کار فکر کنم باید از pwm استفاده کنی!!!
چجوری نمیدونم؟:mrgreen:

Doloop
26-02-2012, 22:39
مهندس شکر ریز میشه بگی شما تو قسمت target چیارو اضافه میکنی و دلیلش چیه؟
غیر از ابتدای کار که ساخت یک پروژه جدیده.
تشکر

alishekarriz
26-02-2012, 22:46
نوشتم .. شد




#include <stm32f10x_lib.h>
#include "STM32_Init.h"
//#include<stm32f10x.h>

int main (void)
{
int i,j;
stm32_Init();
while(1)
{
for(j=1;j<1200;j++)
{
for(i=400;i<j;i++)
GPIOA->ODR = 5;
for(i=900;i>j;i--)
GPIOA->ODR = 10;
}
}
}
اين اعداد با توجه به فركانس و سليقه ممكنه نياز به كم و زياد شدن داشته باشه


اين هم تمام زير و بم پروژه

sadmonew
26-02-2012, 22:54
راستی جناب مهندس صادق محمدی داداش شما مشکل رو حل کردی ولی نگفتی ایراد کار من کجا بود؟:hi:
برنامه چی کم داشت؟:wink:
...
سلام مهندس
من يه پروژه جديد ساختم و فايلي كه شما گذاشتين رو به اين پروژه اضافه كردم. تو عكس مشخصه.
كار خاصي انجام ندادم.
البته اون اروري كه براي شما مي اومد مربوط به اين ميشه كه فايل هدر STM32_Init.h رو پيدا نمي كرد.

Doloop
26-02-2012, 23:08
مهندس توضیح برنامه فراموش نشه...
لطفا.:mrgreen:

Doloop
26-02-2012, 23:30
مهندس منظورم تشریح خط به خط برنامه بود
من تو زبان سی تازه کارم
سوال دوم چطوری میشه با کیل و جیلینک مستقیم برنامرو download کنیم
من تا دیروز این کارو میکردم ولی الان خطا میده مجبورم با segger کامپایل کنم
نمیدونم چه اتفاقاتی اینجا میافته فکر کنم کاره رواح باشه!!!:mrgreen:

armstk
26-02-2012, 23:42
مهندس منظورم تشریح خط به خط برنامه بود
من تو زبان سی تازه کارم
سوال دوم چطوری میشه با کیل و جیلینک مستقیم برنامرو download کنیم
من تا دیروز این کارو میکردم ولی الان خطا میده مجبورم با segger کامپایل کنم
نمیدونم چه اتفاقاتی اینجا میافته فکر کنم کاره رواح باشه!!!
برو داخله گزینه flash بعد configure flash tools رو بزن بعد گزینه ulitili رو بزن بعد اونو رویه cortexm-3 Jlink رو بزن بعد تنظیماتش رو ردیف کن , راستی سربرگ dibug رو هم تنظیماتش رو باید عینه یولیتی بزاری

alishekarriz
27-02-2012, 00:16
مهندس توضیح برنامه فراموش نشه...
لطفا.:mrgreen:



#include <stm32f10x_lib.h>
#include "STM32_Init.h"
//#include<stm32f10x.h>

int main (void)
{
int i,j;
stm32_Init();
while(1)
{
for(j=1;j<1200;j++)
{
for(i=300;i<j;i++)
GPIOA->ODR = 5;
for(i=900;i>j;i--)
GPIOA->ODR = 10;
}
}
}

خيلي ساده هست J از 1 تا 1200 بالا ميره و در هر پله يك متغيير مثل i با J مقايسه ميشه و اگر از i بزرگتر بود LED ها يكي درميان خاموش و اگر كوچكتر بود يكي در ميان روشن ميشه

با اين كار وقتي J كوچك است مقايسه i , J بيشتر به نفع i خواهد شد و وقتي J بزرگ مي شود اين مقايسه به نفع J خواهد شد

با تنظيم تعداد حلقه ها زمان و سرعت مطلوب خواهد شد.. البته من از ابتداي حلقه هاي داخلي كم كردم تا نوع روشن شدن زيباتر بشه اين به خاطر غير خطي بودن ميزان نوردهي با ولتاژ متوسط اعمالي به LED هاست

بی مخ!
27-02-2012, 12:02
چرا من نمی تونم پست بدم؟ (2 3 روزه که نمیام سایت فک کردم خرابه، حالا فهمیدم مشکل از کوکی های مرورگر خودم بوده!!!)!
دستتون درد نکنه همگی!!!
منم قبلاً روی برد قبلیم جواب گرفته بودم!
خب سرم خلوت تر شده بنده هم میام بین دوستان چیزی یاد بگیریم.
خب کاری بعدی چیه؟

alishekarriz
27-02-2012, 13:49
سلام . اقا حالا بيا وسط

هنوز كار قبلي تموم نشده ..

برنامه اي كه با سه فركانس مختلف led ها رو روشن و خاموش كنه و .. نسبت زمان خاموش به روشن براي تمام led ها توسط پتانسيومتر تعيين بشه

pooriya
29-02-2012, 13:16
سلام
اینم برد من با jlink خودم.(البته اصلش مال یکی از بچه های سایته).از اخر این هفته سرم خلوت میشه و تا جائی که از دستم بر بیاد در خدمتم.(با iar کار خواهم کرد.)

You can see links before reply

armstk
29-02-2012, 14:04
سلام پوریا جون
آقا دمت گرم باحال شده , راستی با جیلینکی که با یک بافره میتونی SWD هم پروگرم کنی؟
جیلینکی که خودم ساختم فقط jtag داره و برای SWD جواب نداده !

آقایون و خانوم ها (!) لطفا بیاین با هم دیگه بشینیم برای این stm برنامه بنویسیم و کامل راش بندازیم
هر کی پایه هستش بسم الله

pooriya
29-02-2012, 20:28
سلام پوریا جون
آقا دمت گرم باحال شده , راستی با جیلینکی که با یک بافره میتونی SWD هم پروگرم کنی؟
جیلینکی که خودم ساختم فقط jtag داره و برای SWD جواب نداده !

آقایون و خانوم ها (!) لطفا بیاین با هم دیگه بشینیم برای این stm برنامه بنویسیم و کامل راش بندازیم
هر کی پایه هستش بسم الله

سلام
ممنون ،قابل شمارو نداره.
در مورد بافر هم ،2تا بافر داره ولی با روش swd تست نکردم و فکر هم نمیکنم مشکلی داشته باشه.

pooriya
01-03-2012, 23:24
سلام
اینم اولین سورس من برای stm با کامپایلر IAR واخرین ورژن کتابخانه های CMSIS و کاملا تست شده روی برد.
(کار با IAR واقعا دردسز داره ولی وقتی کار بکنه و قلقش دست ادم بیاد، دیگهههههههههههههه محشره)

pooriya
01-03-2012, 23:33
سلام
اینم از Overclock کردن STM32 تا فرکانس 128MHZکه همون پروژه بالا رو با این فرکانس راه اندازی کردم.
کد زیر:

/************************************************** *****************************
* Function Name : RCC_Configuration
* Description : Configures the different system clocks.
* Input : None
* Output : None
* Return : None
************************************************** *****************************/
void RCC_Configuration(void)
{
/* RCC system reset(for debug purpose) */
RCC_DeInit();

/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enabl e);

/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);

/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);

/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);

/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);

/* PLLCLK = 8MHz * 9 = 72 MHz */
//RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* PLLCLK = 8MHz * 16 = 128 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_16);
// The frequency has also been changed in system_stm32f10x

/* Enable PLL */
RCC_PLLCmd(ENABLE);

/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{;}

/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{;}
}

pooriya
02-03-2012, 00:54
سلام
اینم کتابخونه delay که میشه گفت جزء کتابخونه های پر مصرف هستش.چیز خاصی نداره و همه چیزش مشخصه.

فقط یادتون نره که فرکانس کاری میکرو را داخل تابع delay_init مشخص کنید.مثال زیر برای فرکانس 72mhz هست.
مثال GPIO را همراه با کتابخونه تاخیر مورد نظر پیوست میکنم.


delay_init(72);

pooriya
02-03-2012, 14:33
سلام

راه اندازی LCD کاراکتری با STM.توابع مورد نیاز تماما با کتابخانه های CMSIS نوشته شده اند.(تا فردا اخرین ورژن رو به همراه بهینه سازی شده توابع قرار می دم)

You can see links before reply

alishekarriz
02-03-2012, 14:51
سلام

جناب استاد عليزاده خليلي ممنون از مطالب مفيدتون .. خوشحال شدم زيااااد :o

فقط امثال من تازه كار چطوري به سرعت مطالب شما رو ياد بگيريم .. ميشه توضيحات مبسوط و قدم و قدم هم بزاريد .. حقيقتش ميخواهم اونقدر ياد بگيرم كه هم اين توابع رو بشناسم هم بتونم تغييرات بدهم و هم از اول بنويسم
:wink:
يادگيري كامل روچطوري بايد انجام بدم
CMSIS چيست و چرا ؟! :0013:

armstk
02-03-2012, 15:00
سلام مهندس پوریا
دمه شما گرم , الحق که دارین خوب پیش میرین

راستی مهندس قبلا شما یه برد stm32 از چین خریده بودین ! میشه سورس هاشون زحمت بکشین اپلود کنین برامون؟!؟ (شرمنده که پررویی میکنیما)

راستی usart رو هم تونستین راه بندازین؟!

armstk
02-03-2012, 15:01
سلام مهندس پوریا
دمه شما گرم , الحق که دارین خوب پیش میرین

راستی مهندس قبلا شما یه برد stm32 از چین خریده بودین ! میشه سورس هاشون زحمت بکشین اپلود کنین برامون؟!؟ (شرمنده که پررویی میکنیما)

راستی usart رو هم تونستین راه بندازین؟!

Doloop
02-03-2012, 17:45
دمت قیژ مهندس چه سریع پیش میری:wink:
معلومه که مثل ما تازه کار نیستیا..!!!:0013:

pooriya
02-03-2012, 20:01
سلام

جناب استاد عليزاده خليلي ممنون از مطالب مفيدتون .. خوشحال شدم زيااااد :o

فقط امثال من تازه كار چطوري به سرعت مطالب شما رو ياد بگيريم .. ميشه توضيحات مبسوط و قدم و قدم هم بزاريد .. حقيقتش ميخواهم اونقدر ياد بگيرم كه هم اين توابع رو بشناسم هم بتونم تغييرات بدهم و هم از اول بنويسم
:wink:
يادگيري كامل روچطوري بايد انجام بدم
CMSIS چيست و چرا ؟! :0013:

با سلام

خیلی ممنون،شما لطف دارین.در مورد اموزش قدم به قدم،واقعیتش تو وبلاگم برای میکروهای xmega اموزش می نوشتم که یه مدته عقب افتاده،در حال تکمیل اونا هستم به همین دلیل شاید وقت نکنم ،ولی دوستان با تجربه هستن و کمک میکنن.
در مورد کتابخانه های CMSIS هم تو بخش LPC یادمه یکی از دوستان کامل توضیح داده بودن،حالا اگه پیدا نکردین در خدمتم.

pooriya
02-03-2012, 20:04
سلام مهندس پوریا
دمه شما گرم , الحق که دارین خوب پیش میرین

راستی مهندس قبلا شما یه برد stm32 از چین خریده بودین ! میشه سورس هاشون زحمت بکشین اپلود کنین برامون؟!؟ (شرمنده که پررویی میکنیما)

راستی usart رو هم تونستین راه بندازین؟!

سلام مهندس
واقعیتش من به غیر این برد که برای stm ساختیم کلا برد دیگه ای برای این سری ندارم.قسمت usart هم که مهندس نرسیدم.
دوستان هم یه یا علی بگن

pooriya
02-03-2012, 20:09
سلام

راه اندازی LCD کاراکتری با STM.توابع مورد نیاز تماما با کتابخانه های CMSIS نوشته شده اند.تلاشم این بوده که کتابخانه کاملی باشه و اگه ببینید واقعا روش کار شده،با این حال ورژن 1(V 1)هست و احتمال داره ایراداتی داشته باشه که به مرور با کمک دوستان حل می شه.

You can see links before reply

کامپایلر:IAR

pooriya
02-03-2012, 20:16
سلام
اینم راه اندازی lcd گرافیکی با چیپ ks108 با کتابخانه های CMSIS.چیز خاصی نداره جز چندتا نکته:
1-یک پورت رو می تونین برای وصل به glcd انتخاب کنین
2-پورت انتخاب شده مورد نظر از پایه های (7....0) به خطوط دیتای glcd به ترتیب از (db0....db7) متصل می شوند مگر با تغییرات جزئی در سورس و بقیه پایه های کنترولی در کتابخانه مورد نظر به صورت دستی تعیین می شوند
در ایم مثال glcd به porta متصل است.

کامپایلر:iar

pooriya
03-03-2012, 21:40
سلام

راه اندازی switch های روی برد و نشان دادن شماره کلید مورد نظر روی lcd.

کتابخانه های cmsis
کامپایلر:iar

alishekarriz
03-03-2012, 23:00
سلام

اقا مبارك باشه .. خوب پيش ميري ..
فقط من كه هيچي ياد نگرفتم .. نه با كيل كار ميشه نه قدم به قدم .. اميدوارم دوستان ديگه كاملا متوجه شده باشند

Doloop
04-03-2012, 00:48
فقط من كه هيچي ياد نگرفتم .. نه با كيل كار ميشه نه قدم به قدم
دقیقا...!!!
من اخر متوجه نشدم با کدوم نرم افزار کار کنیم
به نظر من رها کردن کیل اشتباهه ولی چون الان زیاد بلد نیستیم با CMSIS کار کنیم فعلا با نرم افزار CoIDE کار کنیم تا زیروبم قضیه CMSIS دستمون بیاد
راستش من هرچی با رجیسترها ور میرم جواب نمیده
من که میگم بچسبیم به CMSIS
نظر ...؟؟؟

alishekarriz
04-03-2012, 00:57
نظر:
با هر چي كار ميكنيم .. دقيق باشه .. اموزشي باشه ( نه اينكه يه برنامه فقط اجرا بشه) خوبه اون بالا همه گفتند ميخواهيم دقيق و اصولي ياد بگيريم ..

من هنوز معتقد به keil هستم حالا با كتابخونه هاي استاندارد اوليه يا CMSIS ... در باره CoIDE هم نميگم بده .. خوبه اما همچنان فكر ميكنم كار راه انداز هست و ما رو از يادگيري عميق ميكرو دور ميكنه .. حداقل الان كه من چيزي بلد نيستم نبايد زياد سراغش برم تا با دستورات كلنجار برم و نزديكتر به سخت افزار باشم ..

من فكر ميكنم با كيل كار كنيم و تك تك دستورات رو خيلي عميق كار كنيم .. يعني بتونيم دستي كامپايل كنيم .. بدونيم كدوم رجيستر ها كار كردند تا دستور اجرا شد .. بتونيم يك كتابخانه رو تحليل كنيم

حتي محيط نوشتاري راحت هم الان لازم نميدونم ..چون بايد ياد بگيريم بهتر هست كه دستورات رو تك تك تا اخر خودمون بنويسيم

تا دوستان چي بخواهند

Doloop
04-03-2012, 12:01
یه پیشنهاد دیگه:
چطوره با کیل که رجیستری کار میکنیم موازی با اون دستورات cmsis رو هم یاد بگیریم (داخل کیل)
اینطوری با یک تیر دو نشون میزنیم:0013:

alishekarriz
04-03-2012, 17:31
موافق هستم ..

خب الان كجايي؟ داشتيم برنامه اي كه دوهفته پيش تعريف كردم از سه تا led رو مي نوشتيم ؟

Doloop
04-03-2012, 20:20
یه سوال ؟
برای اون برنامه باید با adc کار کرد درسته..
برای adc من تو قسمت ویزارد analog input رو انتخاب کردم
حالا نمیدونم تو کجا میشه مقدار ورودی رو دید مثلا تو debuger کیل میشه تغیرات ورودی رو مشاهده کرد
یه سوال دیگه ؟
تو ویزارد میشه هر پایه رو با سه تا فرکانس بعنوان خروجی تنظیم کرد
2mhz
10mhz
50mhz
من روی کریستال خارجی گذاشتم و هر کدوم از پایه های متصل به led هارو با یکی از این سه تا فرکانس تنظیم کردم ولی همه با یه فرکانس روشن خاموش میشن
علت چیه؟؟

alishekarriz
04-03-2012, 23:05
مهندس .. ميخواهي LED با فركانس چند مگا هرتز روشن خاموش بشه و شما هم ببيني .. اولا كه اصلا LED بيشترين فركانسش خيلي خيلي كمتر هست (شايد چند ده هرتز نميدونم) و در سرعتهاي بالا شدت نورش با توجه به ديوتي سايكل كم و زياد ميشه ( مثل برنامه اي كه من نوشتم در پستهاي قبل) و از اون گذشته اگر چنين LED هم باشه چشم سرعت هاي بالاتر از 10 - 50 هرتز رو (بسته به چشم و تجربه) اصلا تشخيص نميده

اما در مورد ADC براي ديدن پنجره هاي قسمتهاي مختلف در محيط ديباگ از مسير زير view/system viewer برو البته ايكونش هم روي نوار ابزار هست به شكل مربع سبزي كه روش يه آي سي هست

البته از منوي Peripherals هم پنجره هايي مربوط به سخت افزار باز ميشه كه دقيقا نميدونم اين دو مسير چقدر كارهاي هم رو ميتونن انجام بدهند

لطفا برنامه اي رو هم كه نوشتي بزار و يكم توضيح بده در مورد دستورات

Doloop
04-03-2012, 23:52
مهندس من برنامه خاصی ننوشتم
همون برنامه چشمکزنه فقط دارم تو هدر ها چرخ میزنم ببینم دستور فعال سازی یا استفاده ADC چیه؟؟؟
نمیدونم جناب مهندس سعید از کجا دستور کار با پایه ها بعنوان ورودی خروجی رو پیدا کرد؟؟
تو این هدر هاهم که اونقدر معادل سازی کردن که باید ده تا هدر باز کنی تا اون ریشه رو پیدا کنی.

در مورد سوال بالا هم منظورم چیز دیگه ای بود...
ببینید فرکانس کاری میکرو فرضا 50Mhz باشه
تو دیتا شیت گفته هر پایه میتونه با سه فرکانس جداگانه کار کنه 10Mhz و 2Mhz و 50Mhz
حالا من با فرکانس میکرو کاری ندارم میخام پین A.1 با فرکانس 10Mhz چشمک بزنه و پین A.2 با فرکانس 50Mhz چشمک بزنه یعنی دوتا زمان مختلف ولی وقتی تو ویزارد اینو تنظیم میکنم هردو پین با یه فرکانس چشمک میزنه؟؟!!!

pooriya
05-03-2012, 00:09
سلام
دوستان اونقدر این کامپایلر اون کامپایلر میکنن که من اخر نفهمیدم با کدوم دارین کار می کنین.(مس ترسم اخر سرتون بی کلاه بمونه و تو هیچ کدوم مسلط نشین)

مهندس do...loop فعلا adc رو بی خیال.کار کردن روی adc مستلزم تسلط روی اون قسمت هست و این قسمت هم یه مقدار مطالعه می خواد.بزارین یه مقدار جلو بریم بعدا.البته یه کد در این مورد نوشتم و تست کردم ولی بازم هنوز خوب مسلط نیستم.

درباره فرکانس پایه ها فرقی نداره شما با چه فرکانسی پایه مورد نظر رو راه اندازی کنین،بین روشن و خاموش شدن تاخیر نمی دین که با چشم بشه اونو دید،فقط دارین با یه فرکانسی پایه مورد نظر رو فعال می کنین و اصلا چشم قادر به تشخیص اون نیست.(برداشت شما از فرکانس کاری gpio صحیح نیست)

alishekarriz
05-03-2012, 00:15
مهندس
در سايت شركت ST فايلهاي Reference manual و همه Programming manuals هاي مربوط به اين ميكرو رو بگير كامل توضيح داده

You can see links before reply

You can see links before reply

STM32F103RB - STMicroelectronics (You can see links before reply)

مهندس من هم جواب همين منظورت رو دادم ديگه

اولا كه نگفته پايه با اين فركانس روشن و خاموش ميشه .. بلكه گفته پايه ميتواند با اين سرعت تغيير وضعيت بدهد
دوما كه برنامه اي كه ما نوشتيم زمان روشن خاموش شدن رو تعيين ميكنه مثلا هر ثانيه سه بار ..
سوما كه اصلا امكان چشمك زدن هيچ LED با چنين فركانسي نيست يعني نه LED و نه چشم ما .. اين سرعت رو متوجه نميشوند

alishekarriz
05-03-2012, 00:30
جناب عليزاده شما خوب در برنامه و همچنين ميكرو پيش رفتيد .. در صورت امكان درس و تمرين ساده ارائه بديد..

در مورد adc .. مهمترين دليل من براي حركت به سمت آرم بوده و هست .. اگر ممكن هست طي چند هفته اينده تمام جزئياتش رو تمرين كنيم ... مخصوصا حالتهايي كه باعث كاهش خطا ميشه .. مثلا نمونه برداري دوبل يا جدا كردن از cpu و ...

تشكر

pooriya
05-03-2012, 00:44
اقا ما کی باشیم درس و تمرین بدیم.
دوستان هر کدوم رو یه قسمت تمرکز کنن.تا سرعت کار بالا بره.
من تصمیم دارم روی usart و بعد روی timer کار کنم و یه مقدار که جا افتادیم روی قسمت های حساس مانند adc,dma,...

sigma-mx
05-03-2012, 00:55
سلام بر و بچز ( ز معادل s جمع در زبان انگلیسی است ! ) . چطورید ؟ تا کجا پیش رفتید ؟!
نمی دونم دیگه با چه زبانی بگم که از پایه شروع کنید و از Reference Manual شروع کنید !
آخه مهندس doloop مگه من بیکار بودم بیام رجیستر ها رو از تو CMSIS مهندسی معکوس کنم ! خب عزیز یه نگاهی تو Manual بنداز ، ببینید همه چی داخلش نوشته !
اینم که یهو بخاید LCD وADC و اینا رو کار بندازید بنظر شما باعث سردرگمی نمیشه ؟

راه حل :
1 - در بحثی که با دوستان یکی دو شب پیش داشتیم در مورد کامپایلر ، من خیلی سرچ کردم ولی مثل اینکه کماکان Keil بهترین کامپایلر موجود هست و همه تو نت مشکلشون مثل ما ادیتور مقدماتی اون هست .
کیل هم گفته تو ورژن 4.23کنونی داره کم کم با eclipse یکپارچه میشه . من آلان دارم اینو دانلود می کنم ...
اگه مشکل ادیتور حل بشه دیگه جای حرف باقی نمی مونه . ضمنا در مورد اون ادیتور جدید ( CoIDE ) بگم که این ادیتور از بیس eclipse استفاده میکنه .
2 - با توجه به این که شما برد هاتون حاضره و صبر هم ندارید :sa: به نظر من کم کم دستورات CMSIS رو با هم شروع کنیم ! من از یکی دو شب پیش که وقت داشتم واحد های RCC و GPIO و اندکی از ADC رو کار کردم . می تونیم کم کم دستورات رو ادامه بدیم اگه هر جا سوال بود مطرح کنید بعد برید سراغ Manual و اگه پیدا کردید جواب رو بزارید تا بقیه هم استفاده کنند .
OK ????????

alishekarriz
05-03-2012, 08:45
آقا خدا خيرت بده ... بيا و ما رو از اين جهالت نجات بده

ادامه دستورات رو هم با توابع استاندارد معمولي و هم با توابع استاندارد كرتكس CMSIS بريم جلو .. حتي به نظر من اگر CMSIS رو هم چند هفته تاخير بندازيم اشكالي نداره ..

درباره كيل هم درست ميفرماييد فقط مسئله ما محيط نوشتاري هست كه اگر با Eclips اداغام بشه ديگه حرفي نيست

منتظريم به اميد خدا

sigma-mx
06-03-2012, 15:08
مهندس بالاخره بعد از چند روز سر و کله زدن تونستم بین eclipse و Keil ارتباط برقرار کنم !
آخرین نسخه KEIL که 4.23 هست و آخرین نسخه eclipse که 3.7.2 هست رو دانلود کردم . تو help کیل قسمت مربوط به eclipse اضافه شده که روش اتصال plugin کیل رو تو eclipse نشون داده .
من الان میتونم داخل eclipse بنویسم . امکاناتش فعلا فقط code hint هست ولی auto complete ندیدم . برای دیباگ هم بدون باز کردن کیل دیباگ می کنه . به ulink و حتما jlink هم میتونه وصل بشه . ولی مثلا تو دیباگ تمام ابزار ها رو نمی تونم بیارم . مثل logic analyzer . حقیقتش زیاد خوشم نیومد . این کیل اگه فقط code hint و auto complete رو بزاره دیگه فوق العاده میشه ....

sigma-mx
06-03-2012, 15:17
برای شروع توابع CMSIS سعی می کنیم برای اینکه به مشکل بر نخوریم به ترتیب زیر شروع کنیم :

RCC
GPIO & AIO
UART
ADC
...



ابتدا کتابخانه RCC یا Reset and Clock Control رو شروع می کنیم . در کتابخانه های CMSIS تمام تنظیمات از طریق توابع نرم افزاری انجام میشه . حتی انواع اسیلاتورها ، وقفه ها و...

sigma-mx
06-03-2012, 15:19
توابع کتابخانه RCC



void RCC_DeInit(void);
void RCC_HSEConfig(uint32_t RCC_HSE);
ErrorStatus RCC_WaitForHSEStartUp(void);
void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);
void RCC_HSICmd(FunctionalState NewState);
void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);
void RCC_PLLCmd(FunctionalState NewState);
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);
uint8_t RCC_GetSYSCLKSource(void);
void RCC_HCLKConfig(uint32_t RCC_SYSCLK);
void RCC_PCLK1Config(uint32_t RCC_HCLK);
void RCC_PCLK2Config(uint32_t RCC_HCLK);
void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);
void RCC_OTGFSCLKConfig(uint32_t RCC_OTGFSCLKSource);
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);
void RCC_LSEConfig(uint8_t RCC_LSE);
void RCC_LSICmd(FunctionalState NewState);
void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);
void RCC_RTCCLKCmd(FunctionalState NewState);
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_BackupResetCmd(FunctionalState NewState);
void RCC_ClockSecuritySystemCmd(FunctionalState NewState);
void RCC_MCOConfig(uint8_t RCC_MCO);
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);
void RCC_ClearFlag(void);
ITStatus RCC_GetITStatus(uint8_t RCC_IT);
void RCC_ClearITPendingBit(uint8_t RCC_IT);

sigma-mx
06-03-2012, 15:37
لیست توابع و توضیحشونو تو فایل زیر گذاشتم . در واقع تکه های توضیح هر تابع رو کنا هم گذاشتم و برای هر کدوم یه مثال ساده زدم .

alishekarriz
06-03-2012, 16:44
:hi:
سلام

بابا تو ديگه كي هستيييي :o

خيلي خوشحال شدم كه تونستي از يك اديتور ديگه براي كيل استفاده كني
فقط
مهندس ما قبلا هم ميتونستيم داخل eclips يا هر اديتور ديگه بنويسيم ( با اضافه كردن هدر ها به پوشه پروژه اون)‌

حال شما داخل كيل ..ايكليپس رو صدا ميزني يا داخل ايكليپس .. كيل رو؟

ما حالت اول رو ميخواهيم يعني داخل كيل ايكليپس يا امكاناتش وارد بشه

در مورد دستورات هم خيلي اقايي .. ميرم بخونم با سواد بشم ..

راستي تمرين خيلي مهمه .. لطفا تمرين هم بدهيد كه دستورات عملياتي بشه

sigma-mx
06-03-2012, 19:09
سلام مهندس . در مورد eclipse بگم که این قابلیت رو کیل برای نسخه 4.22a به بالا گذاشته . قبلا هم میشد این کار رو کرد ولی الان همونطور که می دونید یک پوشه eclipse در کیل ایجاد شده که حاوی چند فایل جاواست و اگر eclipse این پوشه کیل رو شناسایی کنه یه نوار ابزار کیل در محیط eclipse اضافه می کنه و چند منوی کیل رو . در واقع یجورایی دیگه به کیل نیازی نداره . eclipse توابع کیل رو فراخوانی می کنه و اگه لازم باشه کیل رو هم بالا میاره . این همون چیزیه که کیل می خواست انجام بده و داد . البته فعلا اول راهه ...

در مورد فایل راستش توضیحاتش انگلیسیه . البته خیلی راحته . این روش یادگیری خودمه . امیدوارم بتونید استفاده کنید .
بعنوان تمرین همین کاری رو که برای راه اندازی میکرو نیاز دارید با اسیلاتور 8 پیاده کنید . مثل اسیلاتور داخلی 8 و کلاک باس 1 و 2 و ....
در صورتی که به انواع باس و سخت افزار آشنایی ندارید به منوال میکرو مراجعه کنید و اگه بازم متوجه نشدید بپرسید .
یا علی

alishekarriz
06-03-2012, 22:57
درباره مدهاي متنوع نمونه برداري ADC ممكنه شرح بديد يعني چي ..

Single conversion mode
Continuous conversion mode
Scan mode
Regular group
Injected group

ديتاشيت رو خوندم ولي دقيقا كاربرد و تواناييهاي هر نوع رو نفهميدم ..
Triggered injection
Auto-injection

sigma-mx
06-03-2012, 23:31
در Single conversion همون طور که از اسمش پیداست تنها یک نمونه گرفته میشه .
Continuous conversion در واقع همون مورد قبل هست که در زماهای مشخصی یک پالس adc رو تحریک می کنه و نمونه میگیره . یعنی در زمانهای مشخص نمونه میگیره ، پشت سر هم .
در Scan mode یک گروه ار کانالهای انتخاب میشه و سپس با فرمان ما یک اسکن از این کانالها صورت میگیره . یعنی چند کانالی که انتخاب شده با هم نمونه برداری می کنن . مثلا شما می خاین از 4 تا سنسور هر 1 ثانیه مقدار بگیرید . این چهار کانال رو انتخاب می کنید و سپس هر بار با صدور فرمان این چهار کانال رو اسکن می کنید .
Regular group وInjected group در واقع دو نوع سازماندهی کانالهاست . برای هر حالتی از کانالها که بخواهیم استفاده کنیم باید از رجیسترهای متفاوتی استفاده کنیم . 16 کانال با نمونه برداری Regular و 4 کانال با نمونه برداری Injected داریم . کانالهای مورد نظر رو انتخاب می کنیم و به ترتیب مورد نظر ما مثلا 2 تا 2 تا نمونه میگیره . یسری قوانین خاص داره و در حالت injected نیاز به تحریک برای ادامه نمونه برداری داره .
Triggered injection و Auto-injection هم دونوع تحریک کانال adc برای نمونه برداری هست . یکی به تحریک خارجی احتیاج داره ولی اون یکی خودکار هست .
تو کاربرد ، کارایی این حالتها بیشتر مشخص میشه .

alishekarriz
07-03-2012, 00:12
خيلي ممنون

كاربردشم هر وقت شد با مثال روشنتر كنيم خيلي خوبه

ايكليپس رو دانلود كردم و يادم نبود پرتابل هست ! اون تنظيم رو كجا نوشته ؟ كه كيل رو شناسايي كنه؟

sigma-mx
07-03-2012, 00:43
کیل 4.23 رو هم دانلود کردی ؟ تو این ورژن تو help فکر کنم سومین موضوعش اتصال با eclipse هست.

alishekarriz
07-03-2012, 00:46
كيل رو هم دو هفته هست گرفتم ولي سرچ ميكنم توي هلپ كلا در هيچ موضوعي چيزي پيدا نميكنه .. سرچش نميدونم چه چيزهايي رو پيدا ميكنه
البته الان كه گفتي ديدم .. موضوع دوم هست ..

شما داري تمرين ميكني ؟ مشغولي؟

sigma-mx
07-03-2012, 01:23
شما هم یه تست کن ببین این ادیتور چطوره ...
منتظرم یکی حرفی نظری راجب توابع یا واحد rcc بپرسه یا پیشنهادی بده . من روش آموزشم همیشه حلقه بسته هست ! یعنی با فیدبک کار می کنم . منتظرم یکی دو نفر بیاد بگه من یخورده manual میکرو رو نگاه انداختم . پیشرفت این آموزشها بستگی به انگیزه و اشتیاق گروه داره . وگرنه من کارمو دارم ادامه می دم . به عنوان جمع بندی هم فکر کنم بهتره هر سری از این مطالب رو جمع کنم و بفرستم برای مجله ، اینطوری بهتره . نه؟

ضمنا شدیدا به این قضیه اعتقاد دارم که هیج عاملی باعث پیشرفت و رسیدن به مقصود نیست جز انگیزه و پشتکار

sadmonew
07-03-2012, 10:58
سلام دوستان عزيز مخصوصا جناب شكرريز گل و داداشاي گلم :hi:
منم منتظرم قطعاتي رو كه جناب مهندس شكرريز عزيز واسم تهيه و ارسال كردن به دستم برسه اونوقت بعد اسمبل كردن قطعات، به جمعتون اضافه بشم.:wink:
آقا سعيد شما ادامه بده البته اگه بتوني اين مطالب رو تو مجله بياري خيلي عالي ميشه.
من كه پيگير هستم.

alishekarriz
07-03-2012, 14:40
سلام
هنوز جواب مناسبي نگرفتم ..


Keil C/C++ compiler in Eclipse IDE

Hello!

Can you help me?

How include Keil C/C++ compiler in Eclipse IDE?
Whether it is possible?
Whether debugging with OpenOCD will earn?




You need to study the Eclipse documentation to understand how to adapt it for any compiler;

You need to study the Keil documentation to understand how to control the Keil tools from the command line.

"Whether debugging with OpenOCD will earn?"

Again, you need to study the OpenOCD documentation to understand what debug features it supports, then study the Keil documentation to see what they provide...



What are you trying to accomplish? Here's how I see it:

1) Using Eclipse as a nicer front-end for editing, including browsing through definitions and references: easily done
2) Feeding error output back to Eclipse so you can fix compile errors outside of Keil uVision: relatively easy
3) Using ARMCC compiler to generate ELF and then debugging natively in Eclipse via OCD: haven't tried this but should work, I think ARMCC output is largely compatible with other ELF/DWARF-producing toolchains

If you want to accomplish 3) you should set up an Eclipse based environment that uses GCC, I think there are several available, and then try to replace the build scripts with your own ARMCC based scripts.

I would love to see Keil dropping uVision completely and going Eclipse but given the large amount of work porting the trace features built into uVision (when used with ULINKPro) I'm not sure this will happen anytime soon. If you're using a cheapo probe that doesn't have trace you're probably just as well off going with a generic GCC/OpenOCD solution.

Andrew



Andrew
You can explain how you should set up the three points.
I can't find much documentation

Thanks




DS5 is Eclipse-based - perhaps you could look there for ideas...?




Hi Joldi,

I haven't tried the third option of using a non-Keil debugger with the output from the Keil compiler. However, setting up Eclipse as an edit/build environment is pretty easy. You can use the "Import" menu and select "Existing code as Makefile project" under the C/C++ category. At that point you can use the normal Eclipse method of setting up include paths and symbols to match your project (that part is a little tedious).

To launch a build from Eclipse you have to change to a custom build step and call a build script. I put mine in the same directory as the Keil project and call it build.cmd:
c:\keil\uv4\uv4.exe -b RSN.uvproj -o errors.txt
type errors.txt

In the C/C++ Build settings for the project (right-click on the project) I uncheck "Use default build command" and enter "build.cmd" as the build command instead. Now, when I select "Build" for my project Eclipse will launch build.cmd and pipe errors.txt to the "Console" window.

The last step is to define a custom error parser for the armcc compiler output, which is a little different from gcc. In "Window|Preferences|C/C++|Build" you add an error parser with these definitions:
Error: (.*)\((\d+)\):\s+error:\s+(.*)
Warning: (.*)\((\d+)\):\s+warning:\s+(.*)
Info: (.*)\((\d+)\):\s+info(.*)

Finally, back in the "C/C++ Build" settings for your project you enable the newly created error parser.

Done!

For additional goodness I also have Subversion integrated into Eclipse so the only thing I do in Keil is debugging.

Andrew Q

sigma-mx
07-03-2012, 14:46
سلام مهندس . این فروم ها رو ول کن . چون نسخه جدید نرم افزاره ،چیزی توشون نیست . همون راهنمای کیل رو بخونی کافیه . حالا مشکلت با کدوم مرحله هست ؟

alireza9900
07-03-2012, 15:14
سلام مهندس شکرریز
فایل هلپش این هست:



[Keil Installation Folder]/ARM/Hlp/armtools.chm

sadmonew
07-03-2012, 23:56
سلام داداشاي گلم:hi:
برد منم راه افتاد. اون برنامه اي كه تو پست 114 هست رو پروگرم كردم بدون دردسر كار كرد.:018::o
با J-Link پروگرمش كردم.:wink:
ما هم اومديم....
بازم از مهندس شكرريز ممنونم.

alishekarriz
08-03-2012, 00:20
مهندس از اين پسره شكر... زياد تشكر نكن .. باورش ميشه كاري كرده ..

مبارك باشه .. يه استاد ديگه هم اضافه شد به جمع اساتيد .. كدوم مبحث رو شما تدريس ميكنيد

عكس هم بزاري خوبه

armstk
08-03-2012, 01:23
سلام داداشاي گلم
برد منم راه افتاد. اون برنامه اي كه تو پست 114 هست رو پروگرم كردم بدون دردسر كار كرد.
با J-Link پروگرمش كردم.
ما هم اومديم....
بازم از مهندس شكرريز ممنونم.
مهندس من وقتی این برنامه ای که تویه پست 114 هست رو روی میکرو میریزم , هیچ اتفاق خاصی نمیفته ! verify هم اوکی میده ها ولی هیچ led روشن نمیشه !!

ماله شما چه اتفاقی میفته؟؟ :)

sadmonew
08-03-2012, 01:45
مهندس من وقتی این برنامه ای که تویه پست 114 هست رو روی میکرو میریزم , هیچ اتفاق خاصی نمیفته ! Verify هم اوکی میده ها ولی هیچ led روشن نمیشه !!

ماله شما چه اتفاقی میفته؟؟ :)
سلام مهندس
خيلي جالبه. Ledهاي روي برد من چشمك ميزنن.!؟!؟!؟!؟؟!؟!؟1!!!!!!!!!!!!!!!!!! !!!

alishekarriz
08-03-2012, 11:06
سلام .. سال نو مبارك

اون برنامه درسته و كار هم كرد

من تاحالاداشتم در پروژه قبلي تغييرات ميدادم و اجرا ميكردم .. الان كه خواستم يه پروژه ز صفر بسازم كلي خطا داد تا بالاخره از روي پروژه قبلي فايلهايي هدر و استارت آپ رو اينكلود كردم ..

خواستم بپرسم براي ايجاد يه پروژه چه استانداردي هست .. و چه از كجا بفهميم چه هدر و سورس هايي لازمه

كسي تا حالا بدون استفاده از لايبرري هاي خودش از صفر چيزي نوشته؟!!

sadmonew
08-03-2012, 14:57
مهندس از اين پسره شكر... زياد تشكر نكن .. باورش ميشه كاري كرده ..

مبارك باشه .. يه استاد ديگه هم اضافه شد به جمع اساتيد .. كدوم مبحث رو شما تدريس ميكنيد

عكس هم بزاري خوبه
آقا ما مخلصیم. شما بزگوارید.:hi::hi::0013::wink::0013::0013:: wink::wink:
استاد کــــــــــــــــــــــیـ ـــــــــــــــــــــــه؟ !؟!؟!؟!؟!؟!:mrgreen::mrgreen::mrgreen:
تدریس چی؟!؟!؟!؟!؟!:mrgreen::mrgreen::mrgreen::mrg reen::mrgreen:

armstk
08-03-2012, 18:51
سلام
بچه ها کسی نمیدونه مشکل من از کجاست؟؟
led ها رو تست کردم درست بودن , وقتی هم که میکرو سوییچ ها رو فشار میدم ledها روشن میشن ...

jlink هم که سالمه ... تست هم میکنم ترک ها صحیح و سالم به Stm و led وصل شدن
فکر میکردم بردم داره درست کار میکنه , ولی انگاری سخت در اشتباه بودم

alishekarriz
08-03-2012, 19:00
مگه دفعه قبل نگفتي تست كردي درست بود

تنظيم فركانست رو چك كن .. روشن باشن منابع

ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - شروع آموزش stm32 بر پایه برد سفارشی (You can see links before reply)
اين برنامه رو هم بريز تست كن

Doloop
08-03-2012, 22:13
داداش منم خوب مشکلم همین بود که حل شد
برای منم همون چی چی اوکی رو میداد ولی رو بورد کار نمیکرد
بعد از تنظیم کلاک که مهندس سعید گفت درست شد
تو همون قسمت ویزارد بری درست میکنیش:wink:

pooriya
09-03-2012, 00:23
سلام
دوستان چه خبر؟بعد از یه سری مشکلات،تونستم ds18b20 روی برد رو راه اندازی کنم.(که خوب بود)یه دستی هم به سنسور دمای داخلی بردم که یه نتایجی حاصل شد ولی فعلا همین طور ولش کردم.

به عنوان یه بردار کوچک چندتا پیشنهاد داشتم:
1-از این کامپایلر به اون کامپایلر یا ادیتور پریدن رو ول کنید یکی انتخاب کنید و با اون پیش برید.(چون این مورد هیچ وقت تموم شدنی نیست)
2-برای تسریع کار با توابع و کتابخونه های اماده شرکت stm وcmsis جلو برین،مثال هارو ببینین و در کنار اون می تونین رجیستر های هر قسمت رو هم مطالعه کنین.

من می خوام روی usart کار کنم(البته تا چند روز دیگه).لطفا یه مقدار رونق بدین به این تاپیک.

sadmonew
09-03-2012, 01:11
سلام :hi:
به نظر من خيلي لازم نيست در مورد محيط برنامه نويسي تعصب داشته باشيم.تازه هر كس تو هر محيطي كه بيشتر با اون آشنايي داره بتونه يه بخش ميكرو راه اندازي كنه خيلي بهتره.
اينطوري همه با انواع محيطاي برنامه نويسي(IAR, Keil, CoIDE)بيشتر آشنا ميشن. حالا اگه هينت هم نداشت مساله مهمي نيست مهم اينه كه تمركزمون رو تو قسمت برنامه نويسي بيشتر كنيم.
چه اشكالي داره مثلا من بيام همين USART رو تو Keil راه اندازي كنم و دوست ديگمون بياد همين قسمت رو با IAR و با كتابخونه همون محيط راه بندازه.
البته ميگم اين نظره منه تا دوستان نظرشون چي باشه؟

alishekarriz
09-03-2012, 01:17
مهندس من هم قبول دارم .. از اين به اون نپريم .. فعلا كه كيل رو كارميكنيم ..

ولي خب من به شخصه چيزي بلد نيستم .. شما هم كه خيلي بلدي سخته ريز ريز وقت بزاري الف - ب ياد بدي

فكركنم يكبار بگيد چطوري دستورات رو ياد ميگيريد خوب باشه .. چون manual كه رجيستر ها رو گفته و دستور و مثالي نداره مطابق اون چيزي كه ما مي نويسيم

مثلا منوآل ميگه GPIOB_ODR رو برابر 0 قرار بديم يعني خروجي صفر ميشه اما ما دستور ميديم GPIOB->ODR برابر صفر ..

يا خيلي ريزه كاريهاي ديگه ..

ببخشيد سوال مبتدي ميپرسم ..
موفق باشيم

sadmonew
09-03-2012, 01:23
اينم يه عكس از برد من
البته هنوز وقت نكردم قطعاتو روش لحيم كنم اما همينجوريش هم خوب كار ميكنه.

Doloop
09-03-2012, 12:18
فكركنم يكبار بگيد چطوري دستورات رو ياد ميگيريد خوب باشه .. چون manual كه رجيستر ها رو گفته و دستور و مثالي نداره مطابق اون چيزي كه ما مي نويسيم

مثلا منوآل ميگه GPIOB_ODR رو برابر 0 قرار بديم يعني خروجي صفر ميشه اما ما دستور ميديم GPIOB->ODR برابر صفر .. دمت گرم مهندس حرف دل منو زدی:(
منم مشکلم همین قضیه هست اگه این مشکل حل بشه خیلی جلو رفتیم
به خاطر همین بود که من رفتم سراغ هدر ها تا بدونم چرا مقداردهی رجیستر توی کیل با توی manual یکم تفاوت داره
راستش من توی آرم تازه کارم شاید که نه حتما یکی از مشکلام هم خوندن دیتا شیت و کار با هدر ها هست
مهندسین
sigma_mx
armstk
pooriya
sadmonew
اول این قضیه رو روشن کنید بعد

armstk
09-03-2012, 12:46
سلام
من فکر میکنم مشکل از جیلینک خودم هستش که خودم هم ساختم ! فعلا هم از این جیلینک کلون ها ندارم
ولی این روزا احتمالا یکی دستم میاد تست میگیرم ببینم چی میشه
جیلینک لعنتی verify رو هم OK میده ها ولی پروگرم نمیشه و برنامه عمل نمیکنه ....

ولی تا بردم رو ردیفش کنم پیگیر بحث هستم :wink:

Doloop
10-03-2012, 17:13
خوب مهندسین من قسمت RCC_CR رو خوندم
اول:اینکه فرق این رجیستر توی صفحه 96 منوال و صفحه 129 چیه(فقط کاربرد قسمت PLL2 و PLL3 رو بگید لطفا)
دوم:قسمت HSICAL و HSITRIM رو متوجه نشدم برای چیه و چه ارتباطی با هم دارن؟؟؟
اگه بخواهیم داخل برنامه خودمون فعالش کنیم دستور این رجیستر توی کیل چیه؟؟؟
تشکر:wink:

sigma-mx
10-03-2012, 19:39
سلام مهندس . خوشحالم که بالاخره شما هم شروع کردین
اول یه توضیح بدم اونم اینه که سری STM32F1X خودش دارای زیر شاخه های 101 ، 103 ، 105 و 107 است و هر کدام از این شاخه ها دارای امکانات خاص خود هستند .

Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes.
Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.
High-density devices are STM32F101xx and STM32F103xx microcontrollers where the
Flash memory density ranges between 256 and 512 Kbytes.
XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the
Flash memory density ranges between 768 Kbytes and 1 Mbyte.
Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.

بنابراین این میکرویی که ما استفاده می کنیم (stm32f103rbt6) جزو سری Medium-density این محصول است.حالا این رو برای این گفتم که هم این دیتاشیت و هم کتابخانه های CMSIS برای کل سری STM32F1XX نوشته شدند و ما باید اون قسمت و رجیستر های مربوط به Medium-density رو فقط استفاده کنیم .
Manual هم هر قسمتش اول اومده یسری توضیحات در حالات سخت افزاری و نام رجیسترها داده و در آخر اومده تمام رجیسترها رو با ریزشون بصورت جدول رسم کرده .
حالا با این حساب دو تا بخش معرفی واحد RCC تو Manual می بینید . اولی نوشته برای Low , Medium , High, XL density و اون یکی نوشته برایConnectivity line . خوب مشخصه که ما با اولی ار داریم . سری Connectivity line اینقدر مفصله که چند تا PLL داره !
معمولا هم میکرویی که اسیلاتور داخلی داره و خب می دونید دیگه که اسیلاتور داخلی RC زیاد پایداری نداره و بنابه شرایط دما و ولتاژ ممکنه تغییر کنه و در کار سایر قسمت ها خلل وارد کنه میان و یه رجیستر برای کالیبره کردن این اسیلاتور قرار میدن .حالا این رجیستر HSICAL در واقع همون تنظیم کارخانه هست که فقط خواندنی هست . ولی User هم میتونه با عوض کردن مقدار HSITRIM در زمان از کالیبره خارج شدن اسیلاتور مقادیری رو به مقدار رفرنس اصلی (HSICAL ) اضافه کنه .
در مورد آخری هم بگم که همه این رجیستر ها اگر نوشتنی باشن به صورت GPIOB->ODR=0x0001 و اگه خوندنی باشن بصورت i = GPIOB->ODR نوشته میشند. این ظور نیست که هر کدام به یک صورت خاص باشه !
این علامت <- هم که می بینید از علایم استاندارد زبان C هست . چون این رجیستر ها بصورت Structure نوشته شدن . برای دسترسی به Structure هم از این علامت استفاده میکنند . نظیر این علامت <- یا :: رو می تونید تو هر جا مثل برنامه های ویژوال C کامپیوتر ببینید . در مورد مقداردهی به رجیستر هم که بستگی به این که چند بیتی هست 16 یا 32 ... متفاوته . مثلا 0x0283 برای یک رجیستر 16 بیتی هست و 0x1c2304b3 برای یک رجیستر 32 بیتی .
یا حق

esi_52000
10-03-2012, 19:53
دوستان منم یه پارازیت بدم .اونم اینکه یه نگاه به قسمت st در CoIDE بندازین .خیلی وسوسه کننده هستش.(

lpln852
10-03-2012, 20:07
اقا کسی تا حالا UCOS رو واسه stm32 راه انداخته ؟؟ اگه کسی هست راهنمایی کنید واسه شروع چی کار باید کرد

sigma-mx
10-03-2012, 20:41
دوستان منم یه پارازیت بدم .اونم اینکه یه نگاه به قسمت st در coide بندازین .خیلی وسوسه کننده هستش.( سلام اسی جان . کاش یه عکس میزاشتی ببینیم چی رو میگی . آخه من هنوز دانلودش نکردم !


اقا کسی تا حالا UCOS رو واسه stm32 راه انداخته ؟؟ اگه کسی هست راهنمایی کنید واسه شروع چی کار باید کرد
مهندس اینقدر تو نت مثال زیاده اتفاقا برای stm32 ! چیز مشکلی نیست راه اندازیش . یه سرچ بزن کلی مثال پیدا می کنی .

armstk
10-03-2012, 21:11
اقا کسی تا حالا UCOS رو واسه stm32 راه انداخته ؟؟ اگه کسی هست راهنمایی کنید واسه شروع چی کار باید کرد
سلام
من قبلا رویه یک برد آماده uc-ii + gui رو بوتش کرده بودم , البته فقط ایمیج بود و منم پروگرمش کردم و نتیجه رو دیدم :)
چیزه خاصی نداره , البته چون اماده بودش ولی کلا اصولش اینه که براش تسک بنویسیم و اونم تسک هایه ما رو اجرا کنه
سورسش موجود هست البته تریال بودش - ولی نسخه education رو هم گرفته بودم ولی گمش کردم !!

armstk
10-03-2012, 21:11
اقا کسی تا حالا UCOS رو واسه stm32 راه انداخته ؟؟ اگه کسی هست راهنمایی کنید واسه شروع چی کار باید کرد
سلام
من قبلا رویه یک برد آماده uc-ii + gui رو بوتش کرده بودم , البته فقط ایمیج بود و منم پروگرمش کردم و نتیجه رو دیدم :)
چیزه خاصی نداره , البته چون اماده بودش ولی کلا اصولش اینه که براش تسک بنویسیم و اونم تسک هایه ما رو اجرا کنه
سورسش موجود هست البته تریال بودش - ولی نسخه education رو هم گرفته بودم ولی گمش کردم !!

Doloop
10-03-2012, 23:00
در مورد آخری هم بگم که همه این رجیستر ها اگر نوشتنی باشن به صورت GPIOB->ODR=0x0001 و اگه خوندنی باشن بصورت i = GPIOB->ODR نوشته میشند. این ظور نیست که هر کدام به یک صورت خاص باشه !
این علامت <- هم که می بینید از علایم استاندارد زبان C هست . چون این رجیستر ها بصورت Structure نوشته شدن . برای دسترسی به Structure هم از این علامت استفاده میکنند .

مهندس واقعا دمت قیژ خیلی کمک تاثیر گذاری بود...aa)aa)aa)
شاید بگم 50 درصد مشکل منو حل کردی:wink::wink::wink:
50درصد دیگه مشکل خودمم که باید خودم حلش کنم:cry::cry::cry:
بازم تشکر:wink::0013::hi:

Doloop
10-03-2012, 23:10
راستی مهندس کمه برای شما ، دکتر سعید بگم ایرادی نداره که...:mrgreen::wink:
این CSSON چیه؟؟؟
فعال سازی سیستم امنیتی کلاک؟؟؟درست گفتم.
و تو این مورد HSEBYP ، بای پس چیه؟؟
ببین من درست متوجه شدم!!!
اگه بای پس فعال باشه کلاک سیستم در برابر نویز ایمن میشه
مثل همون حذف نویز توی تقویت کننده ترانزیستوری!!!
اگه اشتب گفتم شما تصحیح کن لطفا.
ببخشید که اموزش یکطرفه شده ، من همش سوال میکنم و شما پاسخ....:mrgreen:
حالا بگذریم این بای پس در مواقع خاصی باید فعال باشه یا نه دلبخواهیه؟؟؟

sigma-mx
10-03-2012, 23:54
بابا از این حرفا نزن بد آموزی داره ! بعد باورم میشه دکترم ، فردا میرم مطب میزنم صد نفر رو میکشم !! :0013:

Clock security system یا CSS از امکانات جالب این میکرو هست که برای شرایط بدی که ممکنه برای میکرو بوجود بیاد کمک شایانی می کنه . اگر این سیستم سخت افزاری که Clock Detector نام داره فعال بشه کلاک سیستم رو زیر نظر می گیره و در صورت بروز مشکل مثل مختل شدن ، از کار افتادن و ... برای کلاک خارجی تمام عملیات جاری رو رها کرده و یک اینتراپت از نوع مسک ناپذیر یا NMI بنام Clock interrupt ایجاد می کنه . در روتین این اینتراپت میشه آخرین کارهای ممکنه برای نجات اطلاعات و اعمال فرمان اضطراری رو انجام داد .
**مهم :
1- این سیستم برای نظارت بر اسیلاتور HSE (خارجی) بصورت مستقیم یا غیر مستقیم است . غیر مستقیم یعنی PLL اگر از HSE استفاده کنه .
2- در صورت مختل شدن کلاک خارجی منبع کلاک روی HSI (داخلی) سوییچ می کنه !!!!! :o:o


If the HSE oscillator is used directly or indirectly as the system clock (indirectly means: it is
used as PLL input clock, and the PLL clock is used as system clock), a detected failure
causes a switch of the system clock to the HSI oscillator and the disabling of the HSE
oscillator. If the HSE clock (divided or not) is the clock entry of the PLL used as system clock
when the failure occurs, the PLL is disabled too.

lpln852
11-03-2012, 09:44
سلام
من قبلا رویه یک برد آماده uc-ii + gui رو بوتش کرده بودم , البته فقط ایمیج بود و منم پروگرمش کردم و نتیجه رو دیدم :)
چیزه خاصی نداره , البته چون اماده بودش ولی کلا اصولش اینه که براش تسک بنویسیم و اونم تسک هایه ما رو اجرا کنه
سورسش موجود هست البته تریال بودش - ولی نسخه education رو هم گرفته بودم ولی گمش کردم !!

ظاهرا این UC/II رو نمیشه با Keil کامپایل کرد باید بریم سراغ ]IAR درسته ؟؟
دوستان اگه کسی مثال یا نسخه education رو داره بزاره خیلی ممنون میشم

دوستان بالاخره معلوم شد با چه کامپایلری میخواید کار کنید ؟؟ اخه این پستا هر 10 تاش واسه یه کامپایلر هست

Doloop
12-03-2012, 00:14
سلام به همه مهندسای stm
بریم سراغ رجیستر بعدی
rcc_cfgr
مشکل من توی این رجیستر اینه که چرا بیت های ppre1 و ppre2 به ترتیب با سرعت پائین و بالا وجود داره
دلیل خاصی داره که باید با سرعت بالا و پائین باشه هر کی میدونه کلا این بیت رو یه مختصر توضیح بده لطفا
و البته این بیت pllxtpre رو هم کلا متوجه نشدم چیه و برای چیه؟؟؟
تشکر

Doloop
12-03-2012, 00:25
مهندسا با توجه به اینکه احتمالاقراره مطالب اموزشی این تایپیک توی مجله اورده بشه سعی کنید از سایت های فارسی اگه مطلبی میزارید با ذکر منبع باشه تا بعدا به مشکل نخوریم
هر کسی هم که میترسه مطلبش به اسم یکی دیگه تو مجله زده بشه خواهشا نذاره البته دوستانی که مطلب میدن برای مجله منبع رو هم ذکر میکنن انشاا...
من که راضی هستم مجله به اسم سایت باشه و منبع رو به این فروم ارجاع بدن
راستی کسی از دوستان اینو به خودش نگیره ولی سعی کنید مطالبی که میزارید از خودتون باشه
البته معلومه که بار مهندسای این سایت واقعا بالاست...:0013:

sigma-mx
12-03-2012, 01:05
در سری stm32 دو باس پیشرفته وجود داره . یکی APB1 و دیگری APB2 . اولی نهایت سرعتش 36MHz هست و دومی 72MHz . مثلا GPIO که نیاز به سرعت بالا داره به APB2 وصله .تایمر ها و USART مثلا به APB1 وصله . حالا Pre1 تقسیم کلاک برای APB1 هست و Pre2 برای APB2 . اسم کلاک این باس ها هم به ترتیب PCLK1 وPCLK2 هست .
PLLXTPRE هم یه تقسیم کننده هست بین خروجی اسیلاتور خارجی HSE و ورودی PLL که میتونه کلاک رو تقسیم بر 1 یا 2 کنه . برای تنظیم محاسبات کلاک و همانند سازی با ورودی کلاک HSI . چون تو HSI فقط تقسیم بر 2 داشتیم .

یادم رفت بگم . به APB1 باس سرعت پایین و به APB2 باس سرعت بالا میگن .

sigma-mx
12-03-2012, 01:10
مهندسا با توجه به اینکه احتمالاقراره مطالب اموزشی این تایپیک توی مجله اورده بشه سعی کنید از سایت های فارسی اگه مطلبی میزارید با ذکر منبع باشه تا بعدا به مشکل نخوریم
هر کسی هم که میترسه مطلبش به اسم یکی دیگه تو مجله زده بشه خواهشا نذاره البته دوستانی که مطلب میدن برای مجله منبع رو هم ذکر میکنن انشاا...
من که راضی هستم مجله به اسم سایت باشه و منبع رو به این فروم ارجاع بدن
راستی کسی از دوستان اینو به خودش نگیره ولی سعی کنید مطالبی که میزارید از خودتون باشه
البته معلومه که بار مهندسای این سایت واقعا بالاست...:0013:
خوشبختانه یا بدبختانه بچه های ایران میکرو همیشه تولید کننده علم هستن . همون بقیه سایت ها همیشه مطلب از اینجا کش میرن . خود من که منبع اصلیم همین Manual هست . برای مثال هم چند تا سایت چینی و تایلندی . خوبه اول ایران میکرو کار با ST رو شروع کرد .

Doloop
12-03-2012, 12:35
برای تنظیم محاسبات کلاک و همانند سازی با ورودی کلاک HSI . چون تو HSI فقط تقسیم بر 2 داشتیم .
نافتاد...ii998)ii998)ii998)

sigma-mx
12-03-2012, 13:03
منظورم این بود که چون تو hsi ما فقط تقسیم بر دو داشتیم . برای hse هم این قابلیت رو هم گذاشتن تا مسیر هر دو اسیلاتور تا pll مثل هم باشه . این کار مزایای زیادی داره . مثلا اگه سورس کلاک ما عوض بشه . دیگه نیازی به تنظیم مجدد تقسیم کننده ها و pll برای ساخت فرکانس مورد نظر نداریم .

Doloop
12-03-2012, 16:02
سلام
رجیستر rcc_cir
من درست متوجه نشدم بیت صفرم و بیتهای متناظر تا بیت 4 نشون میده که وقفه رخ داده یا قسمت وقفه آماده به کاره
بیت cssf چیکاره بیده؟؟؟ اینجا هم امنیت کلاک سیستم وقفه رو تامین میکنه تا اگه یه وقت کلاک دچار مشکل شد اسیلاتور عوض میکنه.
بعد،این قسمت امنیتی همه جای میکرو همین کارو انجام میده یا نه کاره دیگه ای هم میکنه؟؟؟

sigma-mx
12-03-2012, 16:34
این رجیستر ، همون رجیستری هست که در صورت تغییر کردن وضع کلاک های مورد نظر سیستم فعال میشه . مربوط به همون قسمت Clock Security هست . در واقع شما وضعیت OK بودن هر کدام از این اسیلاتور ها رو می تونید از بیت 0 تا 4 این رجیستر که فقط خواندنی هم هست ببینید . در صورت تغییر وضعیت هر کدام از اینها باید فلگ رو پاک کنیم تا برای دفعه بعد آماده به کار بشه و این امر با مقدار دهی به بیت 16 تا 20 محقق میشه . بیت 8 تا 12 هم مربوط به فعال یا غیر فعال کردن اینتراپت هایی هست که در صورت تغییر وضعیت اسیلاتورها به روتین مورد نظر پرش کنه . تنظیمات این اینتراپت در بخش Interrupts and Events صورت می گیره که جزو بالاترین اولویت (2-) و از نوع Non Maskable است . و خود CSSF و CSSC مخصوص حالت مختل شدن اسیلاتور خارجی سرعت بالا HSE هست .

Doloop
12-03-2012, 18:38
دمت قیژ مهندس (دکتر):mrgreen:
یه چیزایی فهمیدم ولی بازم باید مطالبم رو بهت نشون بدم که یه وقت اشتب نکرده باشم
تشکر:wink:

Doloop
12-03-2012, 21:32
چه رابطه اي هست بين دستورات manual و دستورات هدرها و همچنين cmsis
مهندس تا اونجا که من میدونم همهی این هدر ها و CMSIS در اصل از رجیستر های manual استفاده کردن برای ساده سازی توابع مختلف
مثلا شما هدر delay رو اگه دیده باشی برای ایجاد یک تاخیر در حد ثانیه از چندین دستور استفاده شده که ما توی main اصلی فقط delay رو مینویسیم و تاخیر یک ثانیه ایجاد میشه البته باید هدر delay رو هم فرا بخونیم
مرجع همه اینها همون manual هست

armstk
12-03-2012, 22:39
سلام
خیلی شرمنده رفقا که نمیتونم تویه بحث شرکت کنم
متاسفانه خیلی سرم شلوغه , و بردمم کار نمیکنه
حسرت میخورم که چرا نمیتونم تویه این بحث همکاری کنم
خلاصه به بزرگیه خودتون ببخشین , اینو گفتم که فکر نکنین رفیق نیمه راه هستم

armstk
12-03-2012, 22:39
سلام
خیلی شرمنده رفقا که نمیتونم تویه بحث شرکت کنم
متاسفانه خیلی سرم شلوغه , و بردمم کار نمیکنه
حسرت میخورم که چرا نمیتونم تویه این بحث همکاری کنم
خلاصه به بزرگیه خودتون ببخشین , اینو گفتم که فکر نکنین رفیق نیمه راه هستم

Doloop
12-03-2012, 23:26
AFIORST: Alternate function IO reset
Set and cleared by software.
0: No effect
1: Reset Alternate Function


متناوب یعنی چی؟؟؟
منظورش همون امکانات دیگه پایه ها به غیر از ورودی و خروجی!!!

sigma-mx
13-03-2012, 01:00
خب ، یه مثال ساده میزنم که چطور کتابخانه cmsis به پین ها برای set یا reset کردن دسترسی پیدا میکنه ( با تبعیت از Reference Manual .
همه ما می دونیم که رجیستر های میکرو در واقع مکانهایی در حافظه RAM هستند که برای دسترسی به اونها باید طبق جدول ارائه شده توسط کمپانی ، مقادیر یا تنظیمات مورد نظر مون رو در اون آدرس باید بنویسیم یا ازش بخونیم . کنترلر یا cpu هم برای انجام کارش به اون آدرس مراجعه می کنه و مقادیر ما رو پردازش می کنه .

همون طور که قبلا گفتم این میکرو دارای دو باس برای امکانات محیطی یا Peripheral است . که به APB1 باس سرعت پایین و به APB2 باس سرعت بالا می گن . طبیعیه که در بانک رجیستر ها برای ورود به این باس ها آدرسهای جداگانه قرار دادند . حال ما قراره بریم روی باس 2 . چرا ؟ چون واحد GPIO که ما باهاش کار داریم روی باس 2 قرار داره . طبق دیاگرام Manual . پس باید ببینیم آدرس این باس چنده ؟! حالا اگه فایل stm32f10x.h رو باز کنیم مشاهده می کنیم که داخلش آدرس تمامی باس ها و رجیسترها و .. رو نوشته - اینم اول بگم که این فایل هدر برای کل سری stm32f10x نوشته شده . پس اگه داخلش رجیسترهایی مثل can2, ethernet , dac, timer14, .... دیدید تعجب نکنید اونا برای مدل های دیگه هستند -

You can see links before reply


خب . حالا می خایم از گذرگاه AHB که شروع ورود به امکانات محیطی میکرو هست به سمت مقصد نهایی که GPIO هست حرکت کنیم . عبارت
#define PERIPH_BASE ((uint32_t)0x40000000) رو داخل این هدر پیدا کنید . پس مشخص شد که آدرس باس AHB در بانک رجیستر مقدار فوق هست . خب این باس به دو شاخه APB1,APB2 تقسیم میشه . حالا عبارت
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) رو پیدا کنید . این میرسونه که اگه از بانک رجیستر AHB به اندازه 0x10000 بریم جلو به محدوده APB2 وارد میشیم . این عدد رو میتونید با آدرسهای جدول بالا مقایسه کنید . عدد قبلی با عدد فعلی جمع شده و عبارت 0x4001xxx بینشون مشترکه . حالا یه مرحله جلوتر میریم . مثلا وارد GPIOA میشیم . عبارت
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) v رو پیدا کنید . حالا اگر نتیجه رو با جدول بالا مقایسه کنید معلوم میشه که آدرس شروع واحد GPIOA عدد 0x40010800هست که از جمع مقادیر از ابتدا تا اینجا بدست اومد . عبارت
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) رو هم مشاهده کنید . حالا تازه وارد محدوده GPIOA شدیم و می تونیم به رجیسترهای اون دسترسی داشته باشیم .


You can see links before reply

این جدول و رجیسترهای اون برای پورت های دیگه GPIO تکرار میشه . فقط باید بیس آدرس ما عدد بدست اومده باشه و با افست دادن به اون عدد (اضافه کردن عدد های سمت چپ جدول متناظر با هر رجیستر میتونیم به رجیستر مربوطه دسترسی داشته باشیم . مثلا آدرس مطلق دسترسی به این هفت رجیستر برای GPIOA به ترتیب برابر :
0X40010818 - 0X40010814-0X40010810-0X4001080C-0X40010808-0X40010804-0X40010800

هست . حالا با رفتن به این آدرس میشه 32 بیت داخلش نوشت یا خواند . بعضی جاهاش هم که رزرو هست . تو کتابخانه دنبال عبارت :


typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
بگردید . در اینجا اومدن این جدول رو بصورت یک ساختار یا STRUCTURE تعریف کردن و عناصر این جدول رو هم همانند manual جاگذاری کردند . این ساختار یک جدول رو روی حافظه تشکیل میده به این شکل عمل میکنه که وقتی به نام ساختار که GPIO_TypeDef هست یه آدرس نسبت بدیم ( در اینجا آدرس GPIOA=0x40010800) از این آدرس میاد و 7 رجیستر 32 بیتی رو تو حافظه میچینه . حالا ما خیلی راحت میتونیم با فراخوانی اسم ساختار و یکی از اعضای اون بشکل زیر یه مقدار مثلا تو رجیستر BSRR بنویسیم :

GPIOA->BSRR=0x00000001


از این به بعد دیگه کتابخانه مخصوص stm32f10x_gpio.c و هدرش stm32f10x_gpio.h وارد کار میشه . تعریفهای پین 0 تا 15 فقط در واقع مقدار 1 دادن به بیتهای 0و1و... است و فرقی با نوشتن عدد نمی کنه . حالا اگه یک تابع مثلا
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)رو نگاه کنیم میبینیم که اونم از همین راه رفته و راه دیگه ای در واقع نیست .
یه عکس هم براتون میزارم که مقدار پورت رو تو رجیستر ODR در آدرس حافظه مورد نظر بوسیله ابزار Memory در Keil نشون میده .

You can see links before reply
پس معلوم شد چیزی که مهمه آدرس رجیستر هست و همون طوری که می دونیم اسامی فقط نام گذاری ما هستن . حالا تو manual مثلا نوشته GPIOx_ODR و تو کتابخانه به یه طریقی دیگه (structure) و اسمی دیگه .... مهم اینه که آدرس ها با هم میخونه .
خب امیدوارم تا حدی تونسته باشم سر نخ رو دستتون بدم و امیدوارم مفید بوده باشه .....
در ضمن برای نوشتن این پست حدود 2 ساعت وقت صرف شده :0013:
یا حق

sigma-mx
13-03-2012, 01:08
متناوب یعنی چی؟؟؟
منظورش همون امکانات دیگه پایه ها به غیر از ورودی و خروجی!!!
Alternate Function در واقع کارهایی هست که یک پین بجز GPIO میتونه انجام بده . مثل اتصال پین بعنوان پایه TX واحد سریال . در واقع وظیفه فرعی و ثانوی یک پین بجز GPIO . اگر واحد سریال رو پیکربندی کنیم باید پین TX میکرو رو دیگه با GPIO تعریف نکنیم با AFIO از داخل به TX وصلش کنیم .

Doloop
13-03-2012, 01:31
دو ساعت طول کشید

پس بگو چرا دیر جواب دادی
مهندس دمت بازم قیژ آموزش نفس گیری بود
خیلی عالی بود استاد
من اصلا تصور نمیکردم اصل قضیه این باشه

Doloop
13-03-2012, 10:38
سلام
مهندس این رجیسترروهم زحمتشو بکش
rcc_ahbenr
اگه میشه هفت تا بیتشم بگو چیکارمیکنن

alishekarriz
13-03-2012, 11:27
:hi:
سلام

aa)
آقا خيلي عالي و خوب توضيح داديد .. شايسته مقام استادي هستي

:o

حالا يه سوال
اولا شما از كجا فهميدي كه GPIO->ODR وجود داره ( براي نوشتن دستور ) ..از روي استراكت؟

درواقع وقتي در منوآل يك دستوري نوشته شده .. شما چطوري ميفهمي كه چه دستور معادلي بايد تايپ كني كه كيل بفهمه؟

آيا ميشه مطابق دستورات منوآل هم برنامه نوشت ..يعني به همون انشا .. ممكنه يه مثال بزنيد و يك پورت رو روشن كنيد .. با هدر مربوطه .. چون دستورات منوآل رو مينويسم ميگه نوفهمه !!

آيا نوشتن برنامه با گرامر منوآل خاصيتي داره؟ مثلا سرعت بالاتر ؟ آيا مثلا كسي كه در شركت مثلا مودم سازي نشسته از هدرهاي جنرآل استفاده ميكنن يا از دستورات منوآل يا حتي اسمبلي؟ يعني مزيت داره؟!!

باز هم متشكر و ممنونيم استاااد :0013:

sigma-mx
13-03-2012, 13:35
سلام بر اساتید :hi:


حالا يه سوال
اولا شما از كجا فهميدي كه GPIO->ODR وجود داره ( براي نوشتن دستور ) ..از روي استراكت؟خب روش آسونش اینه که مثلا اگه می خوای با GPIO کار کنی یه مثال ازش ببینی ، اون وقت اسم رجیسترها و نحوه کار کردن و باهاش براحتی یاد میگیری . مثال رو هم میشه از سایت کیل برداشت هم نو نت بگردی .
روش یکم پیچیده ترش هم اینه که مثل روشی که تو پست 221 گذاشتم ارتباط رجیسترهای منوال رو با کتابخانه در بیارم . که البته برای تمامی واحد ها به روش رجیستر نویسی تو کیل مثال داره . این روش برای فهم مطلب عنوان شد که به نظر من اگه کسی عمق مطلب رو متوجه بشه دیگه کاری نیست که نتونه انجام بده . در مورد این هم که از کجا فهمیدم حتما gpio->ODR . گفتم، اول مثال . اگه نشد ، می بینم که یه STRUCT تعریف شده که رجیسترهایی رو که من میخوام توش مپ داره . خوب میام آدرس شروعش رو مساوی پورت A میدم و اونم برام کار مورد نظر رو انجام میده . اسم اون struct بود GPIO_TypeDef حالا من هر اسمی که دوست دارم میتونم برای رجیستر تازه ام در نظر بگیرم و یه کپی از ساختار اصلی رو تو ساختار خودم بگیرم .


آيا ميشه مطابق دستورات منوآل هم برنامه نوشت ..يعني به همون انشا .. ممكنه يه مثال بزنيد و يك پورت رو روشن كنيد .. با هدر مربوطه .. چون دستورات منوآل رو مينويسم ميگه نوفهمه !!

مهندس گفتم قبلا . دستورات منوال فقط یه نام گذاری هست . نام رجیستر که تو میکرو ثبت نمیشه . اسم گذاشته که متوجه بشید هر کدوم درباره چیه . فقط کار کردن با آدرسها که دشواره . هدر خود میکرو هم اومده یه نام دیگه گذاشته. البته نه کلا یه چیز دیگه . یکی دو حرف جابجا . مثالی که باید بزنم همون چیزیه که بعنوان آموزش تو اولین پست های این تاپیک گذاشتم . خب چه فرقی می کنه . باید با نامگذاری هدر ارائه شده از خود کمپانی برنامه نوشت دیگه . این کار نه سرعت رو میاره پایین نه چیز دیگه .
حالا چرا اینقدر به پایین اومدن سرعت گیر دادید . موقعی که با avr و 8051 کار می کردید اینقدر نگران پایین اومدن سرعت نبودید .:018:

آقا راستی این دستورات CMSIS واحد RCC رو تونستید بکار بگیرید ؟ اگه تونستید GPIO رو هم دستوراتشو بزارم بعد یه مثال با این دو واحد آپ کنم . OK ؟

sigma-mx
13-03-2012, 13:58
سلام
مهندس این رجیسترروهم زحمتشو بکش
rcc_ahbenr
اگه میشه هفت تا بیتشم بگو چیکارمیکنن
مهندس این رجیستر
AHB Peripheral Clock enable register (RCC_AHBENR)
و همچنین
APB2 peripheral clock enable register (RCC_APB2ENR)
و
APB1 peripheral clock enable register (RCC_APB1ENR)
به ترتیب برای فعال کردن کلاک ادوات متصل شده به باس اصلی - باس 2 و باس 1 هست .
همچنین اینا یه رجیستر RCC_APB2RSTR و RCC_APB1RSTR هم دارن که برای ریست تنظیمات کلاک و بازگرداندن به حالت اولیه مورد استفاده قرار می گیره .

alishekarriz
13-03-2012, 15:49
خب حالا رسيديم جاي خوبش

استاد .. من ميخواستم همينو بدونم
روش استاندارد و درست حسابي و و بدون مهندسي معكوس براي ياد گيري چيه . . من منوآل روياد گرفتم خب .. حالا ميخوام دستور بنويسم .. اگر بخوام مثال ورق بزنم يا هدرها رو كامپايل دستي كنم !!! به نظرم كار درستي نيست ..

به نظر شما روش يادگيري اصولي چيه .. هيچ كتابي ميشناسيد مثل زنده ياد علي كاهه سخت افزار و نرم افزار رو گفته باشه با مثال .. انگليسي فارسي هم نه

در ضمن من براي اينكه يكم كمتر گيج بخورم موقع پيدا كردن دستورات .. يه پروژه ساختم در محيط qt و هدرها رو هم بهش معرفي كردم . حداقل وقتي يه دستور مينويسم چهارتا گزينه ميده كه بفهمم چه دستوراتي وجود داره .. هر چند وقتي هيچي بلد نباشي مثل من اين هينت هم كمكي نميكنه

اين يه توضيح اضافي بود

موضوع اصلي همون روش استاندارد يافتن دستورات هست ..
در پست قبلي هم پرسيدم كه شركتهاي درست حسابي به چه روشي كد مينويسن .. اسمبلي ؟ هدر معمولي ؟ cmsis يا حتي هدر هاي اختصاصي؟

اين كاري كه ما ميكنيم در دانشگاه هاشون تدريس ميشه يا اونها هم مثل ما دست و پا ميزنن

من يه سري فيلم اموزشي در قسمت فيلمها از دانشگاه هند گذاشتم ..

sigma-mx
13-03-2012, 16:28
روش استاندارد و درست حسابي و و بدون مهندسي معكوس براي ياد گيري چيه . . من منوآل روياد گرفتم خب .. حالا ميخوام دستور بنويسم .. اگر بخوام مثال ورق بزنم يا هدرها رو كامپايل دستي كنم !!! به نظرم كار درستي نيست ..

به نظر شما روش يادگيري اصولي چيه .. هيچ كتابي ميشناسيد مثل زنده ياد علي كاهه سخت افزار و نرم افزار رو گفته باشه با مثال .. انگليسي فارسي هم نه
اگه می خوای با رجیستر ها برنامه بنویسی فکر کنم باید مثالهای کیل رو دنبال کنی . بالاخره 1000 تا رجیستر نیست که ! دو تا مثال کیل رو ببینی توش این 7 -8 تا رجیستر مثلا برای GPIO بکارگرفته شده و شما متوجه میشی که اینطوری باید باهاش کار کنی . بقیه دیگه مهارت در زبان C و از همه مهمتر هنر الگوریتم نویسی و حل مسئله هست . برای درست فهمیدن مسایل حتما حتی با وجود CMSIS باید از سخت افزار اطلاع داشته باشید . کتابی هم که دستورات رو توضیح داده شده باشه نداریم . یسری اومدن فقط امکانات آرم رو مثلا برای فیلیپس توضیح دادن !
در ضمن شما وقتی یه سری به منوال بزنی و بعدش بیای و از CMSIS استفاده کنی دیگه نمیدونم کجاش ایراد داره . یعنی شما با استفاده از CMSIS مخالفی ؟!
باید توجه کرد که ما تازه اول راهیم و تازه بکار گیری و استفاده از کتابخانه ها هنر نیست . ما باید روی هدفمون تمرکز کنیم . پروژه درست کنیم . ایده جدید و ....

موضوع اصلي همون روش استاندارد يافتن دستورات هست ..
در پست قبلي هم پرسيدم كه شركتهاي درست حسابي به چه روشي كد مينويسن .. اسمبلي ؟ هدر معمولي ؟ cmsis يا حتي هدر هاي اختصاصي؟

اين كاري كه ما ميكنيم در دانشگاه هاشون تدريس ميشه يا اونها هم مثل ما دست و پا ميزنن
راستش نمیدونم شرکتها به چه روشی می نویسن ولی راهی بجز CMSIS فکر نکنم باشه .آخه CMSIS ;ه همون رجیسترهاست ! برای استفاده راه دیگه ای نداریم ما هم همین راه رو باید بریم ! اگه فکر میکنید که تو ین کتابخانه ها دستورات خیلی زیاد و پیچیده هست و اینا سرعت رو میاره پایین ... باید بگم که قرار نیست ما کتابخانه ها رو رو میکرو بریزیم که ! اینا کامپایل میشن تمام ثابت ها و متغیر ها حذف یا خلاصه سازی میشن . مسیری که من تو چند پست قبل برای یک و صفر کردن گفتم پس از کامپایل به چند دستور تبدیل میشه !
تازه کتابخانه CMSIS اون جورام نیست که فکر کنی یه دستور می نویسم پورت سریال راه میوفته . دو تا دستور می نویسم LCD راه میوفته !! وقتی بریم جلو میبینید که استفاده از CMSIS با رجیستر نویسی فرقی نداره !!! فقط اسامی یخورده بهتر شدن و با استفاده از struct روش مقداردهی به رجیسترها ساده شده . دیگه نمی خاد برای مقدار دادن به رجیستر خاص کلی and و or کنیم !
امیدوارم که با این حرفا شک ها و شبهات دوستان بر طرف بشه و هر چه زود تر شروع به یادگیری کنیم که خیلی عقبیم !!!!

jik
13-03-2012, 17:01
دوستان خواهش میکنم یکی برای ما مبتدی ها هم توضیح بده اصلا چطور با keil و iar پروزه درست کنیم
کتابخونه ها رو از کجا باید بیاریم

خیلی ممنون میشم اگه این کار رو بکنید

alishekarriz
13-03-2012, 17:10
استاد ممنون كه جواب ميدي :wink:

من اصلا با سرعت كاري ندارم الان و با كتابخانه ها هم مشكلي ندارم

فقط ميخوام ياد بگيرم ولي ميخوام ببينم روش اصولي و روتين و .. چيه

مهندسي معكوس كردن به نظرم روش درستي نمياد .. يعني هدر ها رو زير و رو كنيم .. شايدم من اشتباه ميكنم

حقيقتش من اگر منوآل رو بخونم و بتونم برنامه بنويسم كه خيلي خوشحال ميشم
اما
تا حالا چند بار GPIO رو طي ماههاي قبل خوندم ولي تا وقتي توي اين فروم توضيح دستورات داده نشد من نميتونستم چيزي بنويسم

الان هم ADC رو خوندم ولي باز هم نميتونم دقيقا املاء درست رو بنويسم

از طرفي خب برنامه نويس خوبي هم نبودم كه هدر بشناسم و كلاس بدونم چيه و استراك رو خوب تشخيص بدم..

در ضمن سورسهايي مثل STM32_Init.c رو هم خوب نميشناسيم .. يعني اونها تنظيمات ما رو انجام ميدن
و همچنين خواص محيط برنامه مثل كيل رو

باز هم سوال اصلي همون روشن پيدا كردن نحوه نگارش دستور از روي منوآل هست كه شما خيليشو گفتي ..
اگر بيشتر توضيح بديد ممنون ميشم

موفق وشاد باشيم

Doloop
13-03-2012, 17:39
خوب استاد من قسمت رجیستر های RCC رو کامل خودم
الان کلی سوال تو سرم هست؟؟؟!!!ii998)ii998)ii998)

اجازه هست...:lol:

Doloop
13-03-2012, 17:46
دوستان خواهش میکنم یکی برای ما مبتدی ها هم توضیح بده اصلا چطور با keil و iar پروزه درست کنیم
کتابخونه ها رو از کجا باید بیاریم

خیلی ممنون میشم اگه این کار رو بکنید

سلام
خوش اومدی مگه شما هم بورد stm32 رو گرفتی ؟؟
پس چرا الان !!!
مجله شماره 2 رو حتما بخون کار با کامپایلر کیل رو توش خوب توضیح داده فایل های مورد نیازت هم توی پیوست همون مجله هست.

(ویرایش شد)مجله میکروکنترلر فارسی شماره 2 - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

موفق باشی

sigma-mx
13-03-2012, 18:42
خوب استاد من قسمت رجیستر های RCC رو کامل خودم
الان کلی سوال تو سرم هست؟؟؟!!!ii998)ii998)ii998)

اجازه هست...:lol:
مهندس شما که می خوای ریز و بیت به بیت رجیسترها رو همین اول کار بدونی کم کم انگیزت برای شروع ضعیف نمیشه ؟ آخه فقط تئوری هم نیست که ؟ نمی خوای اول دو تا مثال ببینی بعد جواب سوالات رو بگیری ؟
تنها منابع یادگیری Applicaton Note ها و Manual و مثال هاست . فکر نکنید مثل AVR براش 10 تا کتاب هست ! همه هم همین طوری یاد می گیرند . نمی تونید چیز کامل و پیشرفته بخواید ولی آسون . بالاخره اولش برای همه سخته دیگه . باید از منابع و اینترنت هم استفاده کنید. منم هنوز اول راهم . مگه از شروع کار با این میکرو 1 ماه بیشتر گذشته ؟ !

Doloop
13-03-2012, 19:38
مهندس شما که می خوای ریز و بیت به بیت رجیسترها رو همین اول کار بدونی کم کم انگیزت برای شروع ضعیف نمیشه ؟ آخه فقط تئوری هم نیست که ؟

من میخاستم اول زیروبمه رجیستر های پر کاربرد مثل RCC و GPIO رو در بیارم بعد برم سراغ مثال
ولی الان که حرفشو زدی اشتهام باز شد مثال بده...:018:

منم هنوز اول راهم
شوخی نکن استاد:mrgreen:

راستی مهندس شکرریز چطوری کل manual رو تونسته بخونه من که یه هفته هست توی RCC گیر کردم
البته مهندس ما زبانش بیسته 20 :o

alishekarriz
13-03-2012, 19:51
من كجا گفتم كل منوآل رو خوندم .. گفتم GPIO رو خوندم .. و الان هم با ADC كله ميزنم .. البته در واقع گيج ميزنم ..
چون هم مفاهيم جديد هست و هم دستورات رو نميشتونم پيدا كنم ..

داشتم به اين فكر ميكردم اساتيد يه كتاب بزنن مثل كتاب جناب كاهه .. فقط موقع فروش يادتون باشه اين ناشرها مافيا دارن سنگين .. كلا ميزارن سرتون مثل من پشيمون ميشيد.. .. اگر كوير بياد كمك بچه ها كتاب رو چاپ كنه و بفروشه (البته بايد با يك انتشاراتي هم صحبت كنيد) هم سود خوبي داره هم اولين كتابي هست كه به اين شكل توليد شده و هم جاش خيلي خاليه توي بازار
اگر كار سريع پيش بره من خودم طراحي جلد و صفحه آرايي و .. خرج درامدشو انجام ميدم :0013:


آقا سعيد من ياد نگرفتم هنوز از روي منوآل دستور بنويسم cry::


این جدول و رجیسترهای اون برای پورت های دیگه GPIO تکرار میشه . فقط باید بیس آدرس ما عدد بدست اومده باشه و با افست دادن به اون عدد (اضافه کردن عدد های سمت چپ جدول متناظر با هر رجیستر میتونیم به رجیستر مربوطه دسترسی داشته باشیم . مثلا آدرس مطلق دسترسی به این هفت رجیستر برای GPIOA به ترتیب برابر :
0X40010818 - 0X40010814-0X40010810-0X4001080C-0X40010808-0X40010804-0X40010800

هست . حالا با رفتن به این آدرس میشه 32 بیت داخلش نوشت یا خواند . بعضی جاهاش هم که رزرو هست

چطوري ميشه نوشت ؟
لطفا چند خط دستور بديد

alishekarriz
13-03-2012, 21:20
:o :018: :o

سلام
استاااد كجايييي

بالاخره با راهنماييهاي شما تونستم ADC رو روشن كنم

خيلي خوش به حالمه .. :125::gop::fan:



#include <stm32f10x_lib.h>
#include "STM32_Init.h"
//#include<stm32f10x.h>

int main (void)
{
int i,j,a,b,c;
stm32_Init();

RCC->APB2ENR=0x0000020C;
ADC1->CR2=7;
while(1)
{

ADC1->CR2=1;
a=ADC1->DR;
b=a*0.8;
c=a*0.2;

for(j=1;j<a;j++)
{
for(i=b;i<j;i++)
GPIOA->ODR = 5;
for(i=c;i>j;i--)
GPIOA->ODR = 10;
}
}
}

jik
13-03-2012, 21:49
ممنون از راهنمای شما دوست عزیز
من برد رو از جای دیگه ای تهیه کردم

دوستان من یه پروژه تو کیل باز کردم این ارور ها رو میده مشکل از کجاست

Build target 'Target 1'
linking...
1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
1.axf: Error: L6218E: Undefined symbol stm32_Init (referred from main.o).
Target not created

با تشکر

Doloop
13-03-2012, 23:12
دوستان من یه پروژه تو کیل باز کردم این ارور ها رو میده مشکل از کجاستسلام
مهندس پروژه که ساختی main.c رو تو target اضافه کردی
عکس رو ببین باید همه این توابع رو اونجا اضافه کنی چارش هم اگه کلیک راست کنی گزینه add... داره بزن بعد فایل رو انتخاب کن
اگه مشکلت این نبود فایل پروژت رو بزار ببینیم

You can see links before reply

sigma-mx
14-03-2012, 00:23
سلام بر اساتید
اینم یه مثال بسیار ساده برای شروع کار با واحد GPIO و RCC بکمک CMSIS ..........:wink:

RCC & GPIO-01.rar - 4shared.com - online file sharing and storage - download (You can see links before reply)

یه توضیحم بدم که داخلش دو تا پوشه بنامهای Project و Libraries هست . پوشه Project در واقع فایلهای پروژه و Main و کتابخانه های کامپایل شده هست و پوشه دیگه تمام کتابخانه های CMSIS نسخه 3.5 (آخرین نسخه) هست . از اونجا که آدرس دادن این کتابخانه ها یه مقدار مشکلات ایجاد می کنه . سعی کنید کل این پوشه رو یه نسخشو جایی نگه دارید و برای نوشتن پروژه و برنامه جدید از همین پوشه استفاده کنید . و همچنین چون با وجود زیپ کردن بازم حجم این پوشه 2.5 مگ شده پس ارسال هر بار اون یخورده سرعت کار رو می گیره . پس من و شما از این به بعد تنها فایل های main و احتمالا سورس کتابخانه هایی که جدید می نویسیم رو که فقط چند کیلو بایت میشه رو آپ کنیم .
مثال هم کلاک رو روی 72 مگ خارجی تنظیم کرده و led متصل به پین A1 رو هر نیم ثانیه روشن و خاموش می کنه . همین مثال به نظر من کافیه تا یه نفر بقیه توابع GPIO و RCC رو هم تست کنه .

jik
14-03-2012, 09:48
اقا خیلی ممنون واقعا لطف کردی مشکل حل شد

دوستان میشه یکم بهتر یعنی ساده تر توضیح بدید این کتابخونه CMSIS چی هست ؟؟ کجا هست ؟؟ :mrgreen: برای استفاده کردنش کار خاصی لازمه ؟؟ اصلا چی کار باید کرد ؟؟ راستش من تاپیک رو خوندم ولی چیزی نفهمیدم راجب به این کتابخونه

alishekarriz
14-03-2012, 10:05
سلام استاد

پروژه اي كه با CMSIS آپ كرديد .. خيلي خوب بود .. اين دستورات رو هم به همون روش بايد پيدا كنيم

من براي اينكه دستورات رو پيدا كنم رجيستري مپ رو نگاه ميكنم بعد ميرم توي QT كه هينت بده .. اولش رو مينويسم .. بعد ميبينم كدوم دستور شبيه هست به چيزي كه من ميخوام

من يادم نموند اخر اين CMSIS مجاني هست يا پولي؟
OnARM.com (You can see links before reply)

اين رو دانلود دارم ميكنم ..ببينم چيه

استاد ادامه بده ديگه دستا راه افتاد .. قبل از عيد يكي از رباتهاي سوني يا حداقل يه گوشي اپل 6 بسازيم:wink:


=========================================
دو تاپيك در مورد CMSIS هست . .

تشریح کامل دستورات cmsisبرای lpc1768 - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

Cmsis چیه؟ - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

تشریح کامل دستورات cmsisبرای lpc1768 - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

====================================

sigma-mx
14-03-2012, 12:48
سلام بر همه .
اولا CMSIS کاملا رایگانه و شرکتهای سازنده جهت ساپورت هر چه بهتر برنامه نویس باتوجه به قواعد و استاندارد های مشترک بین کتابخانه های CMSIS اونها رو مینویسن و برای دانلود در صفحه میکروی مربوطه قرار میدن .
ضمنا تمام کتابخونه همونی بود که همراه مثال آپ کردم . اگه پوشه حدود 20 مگی اصلی رو دانلود کنید از شرکت خودش ، میبینید بقیش مثال روی برد های معروف خود شرکت هست . اصل موضوع همینی هست که گذاشتم . البته یه help هم همراهشون میزارن معمولا .
روش یادگیری CMSIS بسیار آسونه . شما مثلا می خوای با GPIO کار کنی . میری کتابخونه GPIO رو باز می کنی بالای هر تابع توضیح عملکرد تابع رو نوشته . پارامتر های مورد نیاز و خروجی اگه داشته باشه هم تو ضیح داده . من تو فایل text که قبلا درباره RCC گذاشتم تمام توابع RCC با توضیحاتشو به همراه یه مثال گذاشته بودم .

Doloop
14-03-2012, 18:52
سلام دادا
توی پروژت میشه بگی این خط چیکار میکنه


#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while(1);
}
#endif

sigma-mx
14-03-2012, 19:01
من هنوز باهاش کار نکردم . ولی باید حتما نوشته بشه . بنظر میاد برای اشکال یابی حین برنامه نوشتن باشه . اگه داخل توابع رو نگاه کنید میبینید که یسری کد برای تصدیق پارامتر های تابع نوشته شده . مثلا چک میکنه اگه نوشتی GPIOK مچت رو بگیره . این به همون ربط داره . یسری فایل آموزشی تصویری مهندس شکرریز آپ کرده بود چند رو پیش . یکی از اونا درباره این assert توضیح داده . یه نگاهی بهش بنداز .

Doloop
14-03-2012, 19:19
راستی مهندس قضیه این افست چیه که برای هر رجیستر نوشته شده صفحه 119 manual تو جدول
یکم هم شبیه به گفته شماست



مثلا آدرس مطلق دسترسی به این هفت رجیستر برای GPIOA به ترتیب برابر :
0X40010818 - 0X40010814-0X40010810-0X4001080C-0X40010808-0X40010804-0X40010800

alishekarriz
14-03-2012, 19:43
Bit banding
The Cortex™-M3 memory map includes two bit-band regions. These regions map each
word in an alias region of memory to a bit in a bit-band region of memory. Writing to a word
in the alias region has the same effect as a read-modify-write operation on the targeted bit in
the bit-band region.
In the STM32F10xxx both peripheral registers and SRAM are mapped in a bit-band region.
This allows single bit-band write and read operations to be performed. The operations are
only available for Cortex-M3 accesses, not from other bus masters (e.g. DMA).
A mapping formula shows how to reference each word in the alias region to a corresponding
bit in the bit-band region. The mapping formula is:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
where:
bit_word_addr is the address of the word in the alias memory region that maps to the
targeted bit.
bit_band_base is the starting address of the alias region
byte_offset is the number of the byte in the bit-band region that contains the targeted bit
bit_number is the bit position (0-7) of the targeted bit.
Example:
The following example shows how to map bit 2 of the byte located at SRAM address
0x20000300 in the alias region:
0x22006008 = 0x22000000 + (0x300*32) + (2*4).
Writing to address 0x22006008 has the same effect as a read-modify-write operation on bit
2 of the byte at SRAM address 0x20000300.
Reading address 0x22006008 returns the value (0x01 or 0x00) of bit 2 of the byte at SRAM
address 0x20000300 (0x01: bit set; 0x00: bit reset).
For more information on Bit-Banding, please refer to the Cortex™-M3 Technical Reference
Manual.

pooriya
14-03-2012, 19:43
سلام دادا
توی پروژت میشه بگی این خط چیکار میکنه


#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while(1);
}
#endif


سلام
استفاده کردن یا نکردنش دست خودتون هست و اخلاللی تو برنامه ایجاد نمی کنه.ولی بهتره استفاده بشه و مربوط به خطا یابی هست و یه سری پارا متر ها داره و نام فایل سورس مورد نظر و خطی که خطا تو اون ایجاد شده را گزارش می ده.

توضیهات . پارا متر هاشو می تونیین تو stm32f10x_conf.h پیدا کنید که هلو توضیح داده.

The assert_param macro is implemented in stm32f10x_conf.h as follows:

#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* @retval : None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */



The assert_failed function is implemented in the main.c file or in any other user C files and can be modified by the user in order to take action when an error occurs.

#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval : None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}
#endif


مثلا برای قسمت وقفه های خارجی(که دیگه اونقدر قشنگ گفته من توضیح نمی دم) :

stm32f10x_exti.c
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
{
/* Check the parameters */
assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));
assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
...
}



stm32f10x_exti.h
#define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event))
#define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \
((TRIGGER) == EXTI_Trigger_Falling) || \
((TRIGGER) == EXTI_Trigger_Rising_Falling))

#define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFFF00000) == 0x00) && ((LINE) != (uint16_t)0x00))


If the expression passed to the assert_param macro is false, the assert_failed function is called, otherwise nothing happens.

sigma-mx
14-03-2012, 21:03
راستی مهندس قضیه این افست چیه که برای هر رجیستر نوشته شده صفحه 119 manual تو جدول
یکم هم شبیه به گفته شماست
آدرس اصلی بود 0x40010800 حالا برای اولین رجیستر نوشته 0x00 تا جلوتر ( آفست)یعنی همون آدرس. برای بعدی نوشته 0x04 یعنی 4 تا جلوتر یعنی : 0x40010804 و ....

Doloop
15-03-2012, 01:10
مهندس درک این CMSIS سخته من که چیزی متوجه نشدم.!!!ii998)



GPIO_Initx.GPIO_Pin = GPIO_Pin_1;
GPIO_Initx.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initx.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Initx);
GPIO_Initx.GPIO_Pin = GPIO_Pin_2;
GPIO_Initx.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initx.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Initx);
GPIO_Initx.GPIO_Pin = GPIO_Pin_3;
GPIO_Initx.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initx.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Initx);


مهندس اول همه اینا یه جمله مشترک هست اون برای چیه؟؟
من هدر GPIO رو دیدم ولی اینو توش پیدا نکردم؟؟؟:(

alishekarriz
15-03-2012, 17:38
سلام

اساتيد .. من اين برنامه رو نوشتم و براي اينكه يه تاخير بزارم تا كاليبره انجام بشه حلقه گذاشتم بشماره

بعد از روشن كردن هم يه دستور شرط گذاشتم تا پرچم اماده به كار روشن نشده ادامه نده

اما اين برنامه وقتي استپ به استپ جرا ميشه كار ميكنه ولي وقتي يك ضرب اجرا ميكنم سر اون شرط گير ميكنه يعني فلگ روشن نميشه


#include <stm32f10x_lib.h>
#include "STM32_Init.h"
//#include<stm32f10x.h>

int main (void)
{
int i,j,a,b,c;
stm32_Init();

RCC->APB2ENR=0x0000020C;
ADC1->CR2=1;
ADC1->CR2=0;
GPIOA->ODR = 10;
ADC1->CR2=4;
for(i=0;i<10;i++)
{}
ADC1->CR2=3;

while(1)
{
ADC1->CR2=3;
while(ADC1->SR < 11)
{
}

a=ADC1->DR;
ADC1->SR=10;
b=a*0.8;
c=a*0.2;

for(j=1;j<a;j++)
{
for(i=b;i<j;i++)
GPIOA->ODR = 5;
for(i=c;i>j;i--)
GPIOA->ODR = 10;
}
}
}

يك سوال .. من در اين برنامه نگفتم كه كدوم پايه مبدل كار كنه .. اما تغييرات پتانسيومتر روي سيستم تاثير درست داره !!

Doloop
16-03-2012, 00:26
سلام
مهندس من یه سوال دارم شما متغیرهات همه اینت تعریف شدن ولی مقدار بی و سی میتونه اعشار باشه درسته
برنامت ارور نداد