Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil uVision v4.x, RL- arm
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
lena1512
Здравствуйте!
Люди добрые, помогите пожалуйста. Работаю в среде Keil uVision v4.20. Разработала программу, которую необходимо зашить в микроконтроллер STM32F103ZE, привязать к операционке rtx keil (пока на уровне симулятора). Это мой первый опыт. smile3046.gif До этого ничем подобным не занималась.

Подскажите как подступиться к IDE Keil. Может у кого-нибудь есть пример программы как в симуляторе запустить "Hello World" через UART1 микроконтроллера STM32F103хх.
KnightIgor
Цитата(lena1512 @ May 11 2011, 09:45) *
Здравствуйте!
Люди добрые, помогите пожалуйста. Работаю в среде Keil uVision v4.20. Разработала программу, которую необходимо зашить в микроконтроллер STM32F103ZE, привязать к операционке rtx keil (пока на уровне симулятора). Это мой первый опыт. smile3046.gif До этого ничем подобным не занималась.

Подскажите как подступиться к IDE Keil. Может у кого-нибудь есть пример программы как в симуляторе запустить "Hello World" через UART1 микроконтроллера STM32F103хх.


Где-то в дебрях структуры подкаталогов KEIL в папках с названиями, говорящими о примерах, есть такое.
Запомните ключевое слово "retarget.c" и "serial.c" cool.gif

Успехов!
lexanet
Я делал на stm32f100, но, думаю разницы нету.

Простой код rtos от keil-a, 2 задачи, 2 светодиода:
Код
#include "stm32f10x.h"
#include "STM32_Init.h"
#include "rtl.h"

#define Set_PortC_Pin_8_output ((GPIOC->CRH |= 0x2)|(GPIOC->CRH &= ~0xC))
#define Set_PortC_Pin_9_output ((GPIOC->CRH |= 0x20)|(GPIOC->CRH &= ~0xC0))

const unsigned long led_mask[] = { 1UL<<8, 1UL<<9 };

OS_TID t_LED1;
OS_TID t_LED2;

void DevsInit(void)
{
   RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

   Set_PortC_Pin_8_output;
   Set_PortC_Pin_9_output;

}

void LEDOn (uint32_t num)
{
   GPIOC->BSRR = led_mask[num];
}

void LEDOff (uint32_t num)
{
   GPIOC->BRR = led_mask[num];
}

__task void f_LED1 (void)
{
   while (1)
   {
      LEDOn (0);
      os_dly_wait (200);
      LEDOff (0);
      os_dly_wait (200);
   }
}

__task void f_LED2 (void)
{
   while (1)
   {
      LEDOn (1);
      os_dly_wait (400);
      LEDOff (1);
      os_dly_wait (400);
   }
}

__task void init (void)
{
   os_tsk_prio_self (100);

   t_LED1 = os_tsk_create (f_LED1, 20);
   t_LED2 = os_tsk_create (f_LED2, 20);

   os_tsk_delete_self ();
}

int main (void)
{
   SystemInit ();
   stm32_Init();
   DevsInit();
   os_sys_init(init);
   return 0;
}


Если нужен UART, можно использовать STM32_Init.c. Использовать его можно и как визард, наставить нужных галочек, а можно прямо из него выдрать готовый код инициализации uart-а. Типа такого:
Код
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;                                    // enable clock for Alternate Function
AFIO->MAPR   &= ~(1 << 2);                                            // clear USART1 remap
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;                                   // enable clock for GPIOA
GPIOA->CRH   &= ~(0xFFUL  << 4);                                      // Clear PA9, PA10
GPIOA->CRH   |=  (0x0BUL  << 4);                                      // USART1 Tx (PA9)  alternate output push-pull
GPIOA->CRH   |=  (0x04UL  << 8);                                      // USART1 Rx (PA10) input floating
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;                               // enable clock for USART1
USART1->BRR  = (0x9C << 4);
USART1->BRR  = 0x4;
USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE);                       // RX, TX enable
USART1->CR1 |= USART_CR1_UE;                                        // USART enable


А чтобы потом вывести что нить, достаточно дописать две короткие функции:

Код
void UartSendChar (char ch)
{
    while (!(USART1->SR & USART_SR_TXE)) {}
    USART1->DR=ch;
}

void UartSendStr (char *str)
{
    while (*str != 0)
    {
        UartSendChar (*str++);
    }
}


И все. Про KEIL, RTOS и самое начало можно тут поподробней прочитать. Я там, правда, с дискавери баловался, но переделки будут минимальны.
AlexandrY
Цитата(lexanet @ May 14 2011, 19:49) *
Я делал на stm32f100, но, думаю разницы нету.


С Keil-ом так не работают. Ощущение что это какой-то GCC, а не KEIL!

Нормально новички должны делать все через визард создания проекта пару кликами.
Или даже вообще готовый пример открывать из директории \Keil\ARM\RL\RTX\Examples и редактировать там по одной строчке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.