Embedded
Embedded
#include "stm32f4xx.h"
void delayMs(int n);
int main(void) {
RCC->AHB1ENR |= 1
GPIOA->MODER &= ~0x00000C00; GPIOA->MODER |= 0x00000400;
while(1) {
GPIOA->ODR |= 0x00000020;
delayMs(500);
GPIOA->ODR &= ~0x00000020;
delayMs(500); } }
void delayMs(int n) {
int i;
for (; n > 0; n--)
for (i = 0; i < 3195; i++) ; }
GPLO1B
#include "stm32f4xx.h"
int main(void) {
RCC->AHB1ENR |= 4;
RCC->AHB1ENR |= 1;
GPIOA->MODER &= ~0x00000C00;
GPIOA->MODER |= 0x00000400;
GPIOC->MODER &= ~0x0C000000;
while(1) {
if (GPIOC->IDR & 0x2000)
GPIOA->BSRR = 0x00200000; else
GPIOA->BSRR = 0x00000020; }
Seven segment
#include "stm32f4xx.h"
void delayMs (int n);
int main(void)
{
RCC->AHB1ENR |= 2;
RCC->AHB1ENR |= 4;
GPIOC->MODER &= ~0x0000FFFF;
GPIOC->MODER |=0x00005555;
GPIOB->MODER &= ~0x0000000F;
GPIOB->MODER |= 0x00000005;
for(;;)
{
GPIOC->ODR = 0x0007;
GPIOB->BSRR =0x00010000;
GPIOB->BSRR = 0x00000002;
delayMs(8);
GPIOC->ODR = 0x006D;
GPIOB->BSRR = 0x00020000;
GPIOB->BSRR = 0x00000001;
delayMs(8);
}
}
void delayMs (int n)
{
int i;
for (; n > 0; n--)
for (i = 0; i < 3195; i++);
}
LCD
#include "stm32f4xx.h"
#define RS 0x20
#define RW 0x40
#define EN 0x80
void delayMs(int n);
void LCD_command(unsigned char command);
void LCD_data(char data);
void LCD_init(void);
void PORTS_init(void);
int main(void) {
LCD_init();
delayMs(100);
while(1) {
LCD_data('H');
delayMs(300);
LCD_data('E');
delayMs(300);
LCD_data('L');
delayMs(300);
LCD_data('L');
delayMs(300);
LCD_data('O');
delayMs(5000);
LCD_command(1);}}
void LCD_init(void) {
PORTS_init();
delayMs(30);
LCD_command(0x30);
delayMs(10);
LCD_command(0x30);
delayMs(1);
LCD_command(0x30);
LCD_command(0x38);
LCD_command(0x06);
LCD_command(0x01);
LCD_command(0x0F); }
void PORTS_init(void) {
RCC->AHB1ENR |= 0x06;
GPIOB->MODER &= ~0x0000FC00;
GPIOB->MODER |= 0x00005400;
GPIOB->BSRR = 0x00C00000;
GPIOC->MODER &= ~0x0000FFFF;
GPIOC->MODER |= 0x00005555;}
void LCD_command(unsigned char command) {
GPIOB->BSRR = (RS | RW) << 16;
GPIOC->ODR = command;
GPIOB->BSRR = EN;
delayMs(0);
GPIOB->BSRR = EN << 16;
if (command < 4)
delayMs(2); else
delayMs(1); }
void LCD_data(char data) {
GPIOB->BSRR = RS;
GPIOC->ODR = data;
GPIOB->BSRR = EN;
delayMs(0);
GPIOB->BSRR = EN << 16; delayMs(1); }
void delayMs(int n) {
int i;
for (; n > 0; n--)
for (i = 0; i < 3195; i++) ;}
KEYPAD
#include "stm32f4xx.h"
void delay(void);
void keypad_init(void);
char keypad_kbhit(void);
int main(void) {
keypad_init();
RCC->AHB1ENR |= 1;
GPIOA->MODER &= ~0xC0000C00;
GPIOA->MODER |= 0x00000400;
while(1) {
if (keypad_kbhit() != 0)
GPIOA->BSRR = 0x00000020; else
GPIOA->BSRR = 0x00200000; }}
void keypad_init(void) {
RCC->AHB1ENR |= 0x14;
GPIOC->MODER &= ~0x0000FFFF;
GPIOC->PUPDR = 0x00000055; }
char keypad_kbhit(void)
{
int col;
GPIOC->MODER = 0x00005500;
GPIOC->BSRR = 0x00F00000;
delay();
col = GPIOC->IDR & 0x000F;
GPIOC->MODER &= ~0x0000FF00;
if (col == 0x000F)
return 0;
else
return 1; }
void delay(void) {
int i;
for (i = 0; i < 20; i++) ; }
serial
#include "stm32f4xx.h"
void USART2_init(void);
void USART2_write(int c);
void delayMs(int);
int main (void){
char message[] = "Hello\r\n";
int i;
USART2_init();
while(1) {
for (i = 0; i < 7; i++) {
USART2_write(message[i]); }
delayMs(5000); }
}void USART2_init (void) {
RCC->AHB1ENR |= 1;
RCC->APB1ENR |= 0x20000;
GPIOA->AFR[0] &= ~0x0F00;
GPIOA->AFR[0] |= 0x0700;
GPIOA->MODER &= ~0x0030;
GPIOA->MODER |= 0x0020;
USART2->BRR = 0x0683;
USART2->CR1 = 0x0008;
USART2->CR2 = 0x0000;
USART2->CR3 = 0x0000;
USART2->CR1 |= 0x2000; }
void delayMs(int n) {
int i;
for (; n > 0; n--)
for (i = 0; i < 2000; i++) ; }
void USART2_write (int ch) {
while (!(USART2->SR & 0x0080)) {}
USART2->DR = (ch & 0xFF);}
OPTOISOLATOR
#include "stm32f4xx.h"
void delayMs(int n);
int main(void)
{
RCC->AHB1ENR |= 1;
GPIOA->MODER &= ~0x00000C00;
GPIOA->MODER |= 0x00000400;
while(1) {
GPIOA->BSRR = 0x00000020;
delayMs(500);
GPIOA->BSRR = 0x00200000;
delayMs(500);}}
void delayMs(int n) {
int i;
for (; n > 0; n--)
for (i = 0; i < 3195; i++) ;}
STEPPER MOTOR
#include "stm32f4xx.h"
void delayMs(int n);
int main(void) {
const char steps[ ] = {0x90, 0x30, 0x60, 0xC0};
int i;
RCC->AHB1ENR |= 1;
GPIOA->MODER &=~0x0000FF00; GPIOA->MODER |= 0x00005500;
for (;;) {
GPIOA->ODR = steps[i++ & 3];
delayMs(100);}}
void delayMs(int n)
{
int i;
for (; n > 0; n--)
for (i = 0; i < 3195; i++) ;}
DAC0808
#include "stm32f4xx.h"
int main(void) {
int data;
RCC->AHB1ENR |= 1;
GPIOA->MODER |= 0x00000300;
RCC->APB1ENR |= 1 << 29;
DAC->CR |= 1;
while(1) {
DAC->DHR12R1 = data++ & 0x0FFF;}}
Lm35
#include "stm32f4xx.h"
#include <stdio.h>
void USART2_init(void);
int USART2_write(int c);
void delayMs(int n);
int main (void) {
int result;
double temp;
RCC->AHB1ENR |= 4;
GPIOC->MODER |= 3;
RCC->APB2ENR |= 0x00000100;
ADC1->CR2 = 0;
ADC1->SQR3 = 10;
ADC1->SQR1 = 0;
ADC1->CR2 |= 1;
USART2_init();
while (1) {
printf("LM34 Temperature Sensor\r\n");
ADC1->CR2 |= 0x40000000;
while(!(ADC1->SR & 2)) {}
result = ADC1->DR;
temp = (double)result / 4095 * 330;
printf("%d, %.2f\r\n", result, temp);
delayMs(500);}}
void USART2_init (void) {
RCC->AHB1ENR |= 1;
RCC->APB1ENR |= 0x20000;
USART2->BRR = 0x0683;
USART2->CR1 = 0x000C;
USART2->CR2 = 0x0000;
USART2->CR3 = 0x0000;
USART2->CR1 |= 0x2000;
GPIOA->AFR[0] &= ~0x0F00;
GPIOA->AFR[0] |= 0x0700;
GPIOA->MODER &= ~0x0030;
GPIOA->MODER |= 0x0020; }
int USART2_write (int ch) {
while (!(USART2->SR & 0x0080)) {}
USART2->DR = ch;
return ch;}
struct _FILE { int handle; };
FILE _stdout = {1};
int fputc(int c, FILE *f) {
return USART2_write(c); }
void delayMs(int n) {
int i;
for (; n > 0; n--)
for (i = 0; i < 3195; i++) ;
}