久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32 GPIO/USART/timer 控制(寄存器版)
[打印本頁]
作者:
thaiqi
時間:
2021-9-8 14:34
標題:
STM32 GPIO/USART/timer 控制(寄存器版)
本文出自:zhishi-zhishi點net
在開發板上試驗了GPIO點亮LED,串口中斷和定時器。
#include "stm32f10x.h"
/*
GPIO :
PC.14 PC.15 <---> LED
PB.7 <---> Button
PA.9 PA.10 <---> USART
*/
#define RCC_APB2ENR *(uint32_t*)(0x40021000+0x18)
#define RCC_APB1ENR *(uint32_t*)(0x40021000+0x1C)
#define GPIOC_CRH *(uint32_t*)(0x40011000+0x04)
#define GPIOC_ODR *(uint32_t*)(0x40011000+0x0C)
#define GPIOB_CRL *(uint32_t*)(0x40010C00+0x00)
#define GPIOB_ODR *(uint16_t*)(0x40010C00+0x0C)
#define GPIOB_BSRR *(uint16_t*)(0x40010C00+0x10)
#define SETENA_ISER0 *(uint32_t*)(0xe000E100+0x00)
#define EXTI_IMR *(uint32_t*)(0x40010400+0x00)
#define EXTI_RTSR *(uint32_t*)(0x40010400+0x08)
#define EXTI_FTSR *(uint32_t*)(0x40010400+0x0C)
#define EXTI_PR *(uint32_t*)(0x40010400+0x14)
#define AFIO_EXTICR2 *(uint32_t*)(0x40010000+0x0C)
#define GPIOA_IDR *(uint32_t*)(0x40010800+0x08)
#define GPIOA_ODR *(uint32_t*)(0x40010800+0x0C)
#define GPIOA_CRH *(uint32_t*)(0x40010800+0x04)
#define SETENA_ISER1 *(uint32_t*)(0xe000E100+0x04)
//#define USART1_BASE *(uint32_t*)(0x40013800+0x00) //bug : redefinition
#define USART1_SR *(uint32_t*)(0x40013800+0x00)
#define USART1_DR *(uint32_t*)(0x40013800+0x04)
#define USART1_BRR *(uint32_t*)(0x40013800+0x08)
#define USART1_CR1 *(uint32_t*)(0x40013800+0x0C)
#define USART1_CR2 *(uint32_t*)(0x40013800+0x10)
#define USART1_CR3 *(uint32_t*)(0x40013800+0x14)
#define TIM1_CR1 *(uint32_t*)(0x40012c00+0x00)
#define TIM1_DIER *(uint32_t*)(0x40012c00+0x0C)
#define TIM1_SR *(uint32_t*)(0x40012c00+0x10)
#define TIM1_PSC *(uint32_t*)(0x40012c00+0x28)
#define TIM1_ARR *(uint32_t*)(0x40012c00+0x2C)
#define TIM3_CR1 *(uint32_t*)(0x40000400+0x00)
#define TIM3_DIER *(uint32_t*)(0x40000400+0x0C)
#define TIM3_SR *(uint32_t*)(0x40000400+0x10)
#define TIM3_PSC *(uint32_t*)(0x40000400+0x28)
#define TIM3_ARR *(uint32_t*)(0x40000400+0x2C)
#if 1
int m = 0;
void EXTI9_5_IRQHandler(void)
{
EXTI_PR = 0x1 << 7;
m++;
if(m%2 == 1)
GPIOC_ODR = 0x0 << 14;
else if(m%2 == 0)
GPIOC_ODR = 0x3 << 14;
}
#endif
char test_str[128];
char* p;
int i;
volatile int mm = 0;
volatile int old_mm = 0;
char recv_buf[64];
int num = 0;
int is_one_line = 0;
void USART1_IRQHandler(void)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
mm += 10;
recv_buf[num++] = USART1_DR;
if(num >= 64)
num = 0;
if(recv_buf[num-1] == 0x0a && recv_buf[num-2] == 0x0d)
is_one_line = 1;
}
int time1_out = 0;
int old_time1_out= 0;
#if 1
void TIM1_UP_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
time1_out++;
}
#else
void TIM3_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM3, TIM_FLAG_Update);
time1_out++;
}
#endif
int main()
{
RCC_APB2ENR = 0x1 << 4 | 0x1 << 3 | 0x1 << 0 | 0x1 << 2 | 0x1 << 14 /*| 0x1 << 11 */ ; //p53
GPIOC_CRH = 0x03 << 28 | 0x03 << 24; //p68
GPIOB_CRL = 0x00 <<28 | /*0x01*/ /*0x10 --bug */0x02 << 30;
GPIOC_ODR = 0x3 << 14; //p69
EXTI_IMR = 0x01 << 7;
//EXTI_RTSR = 0x01 << 7;
EXTI_FTSR = 0x01 << 7;
AFIO_EXTICR2 = 0x01 << 12;
GPIOA_ODR = 0x1 << 9;
GPIOA_CRH = 0x3 << 4 | 0x2 << 6 | 0x0 << 8 | 0x1 << 10;
SETENA_ISER0 = 0x1 << 23;
SETENA_ISER1 = 0x1 << 5;
USART1_BRR = 0x0271;
USART1_CR1 |= 0x03 << 2; //TE/RE
USART1_CR1 |= 0x1 << 5 /* | 0x1 <<7*/;
USART1_CR1 |= 0x1 << 13;
#if 1
RCC_APB2ENR |= (0x1 << 11);
TIM1_CR1 |= 0x1 << 0; //CEN
TIM1_DIER |= 0x1 << 0; //UIE
TIM1_SR &= 0xFFFE; //UIF
TIM1_PSC = 7199;
TIM1_ARR = 9999;
SETENA_ISER0 |= 0x01 << 25;
#else
RCC_APB1ENR |= 0x1 << 1;
TIM3_CR1 |= 0x1 << 0; //CEN
TIM3_DIER |= 0x1 << 0; //UIE
TIM3_SR &= 0xFFFE; //UIF
TIM3_PSC = 7199;
TIM3_ARR = 9999;
SETENA_ISER0 |= 0x01 << 29;
#endif
while(1)
{
if(is_one_line == 1)
{
memset(test_str, 0, sizeof(test_str));
sprintf( test_str, "%s", recv_buf);
p = test_str;
while((*p)!='\0')
{
USART_SendData(USART1, *(p++));
for(i=0; i < 1000; i++)
;
}
num = 0;
is_one_line = 0;
memset(recv_buf, 0, sizeof(recv_buf));
}
if(old_time1_out == time1_out)
;
else
{
memset(test_str, 0, sizeof(test_str));
sprintf( test_str, "old: %d, time1_out:%d", old_time1_out, time1_out);
p = test_str;
while((*p)!='\0')
{
USART_SendData(USART1, *(p++));
for(i=0; i < 1000; i++)
;
}
old_time1_out = time1_out;
}
}
return 0;
}
復制代碼
至此試驗就告完成。用過仿真軟件Proteus(后來好象串口COMPIM失效了。)和編譯器Keil MDK5,表示謝意。
源文件打包在此:
test_timer.7z
(268.11 KB, 下載次數: 8)
2021-9-8 15:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
本文出自:www點zhishi-zhishi點net/working/stm32_timer.html
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品久久久久久久久久久久久
|
久久久一区二区
|
国产极品国产极品
|
久久久久久成人
|
水蜜桃一区二区
|
日韩欧美在线看
|
久久a级片
|
日本中文字幕视频
|
激情综合婷婷
|
亚洲精品1区2区
|
黄色一级免费
|
成人一级片
|
欧美精品日韩
|
国产精品自拍一区
|
午夜xxx
|
天天综合精品
|
久久久黄色片
|
国产亚洲区
|
亚洲小说欧美激情另类
|
久久久噜噜噜
|
黄色片网站免费
|
日韩欧美一区在线
|
久久日韩精品
|
婷婷综合视频
|
日本国产在线
|
国产精品2区
|
日韩欧美国产一区二区三区
|
国产黄在线观看
|
欧美在线视频观看
|
av免费看网站
|
欧美日韩亚洲综合
|
欧美性大战xxxxx久久久
|
国产精品三级在线
|
亚洲免费看片
|
成人在线小视频
|
福利在线播放
|
国产h片在线观看
|
国产福利在线播放
|
国产乱码精品一区二区三
|
国产农村妇女aaaaa视频
|
精品久久精品
|